Mam to polecenie, które robi to, co chcę, ale nie mogę uzyskać aliasu w moim .bashrc (zauważ, że używa zarówno pojedynczych, jak i podwójnych cudzysłowów):
svn status | awk '$1 =="M"{print $2;}'
Próbowałem:
alias xx="svn status | awk '$1 ==\"M\"{print $2;}'"
I kilka innych zdroworozsądkowych kombinacji bez powodzenia… Wiem, że bash jest bardzo wybredny w cudzysłowach. Więc jak należy go nazwać i dlaczego? Dzięki
linux
bash
quotes
double-quotes
pragmatic_programmer
źródło
źródło
Oto coś, co daje to samo bez użycia aliasu. Umieść to w funkcji w swoim .bashrc:
xx() { svn status | awk '$1 =="M"{print $2;}' }
W ten sposób nie musisz się martwić, że cytaty są prawidłowe. Używa dokładnie tej samej składni, co w wierszu poleceń.
źródło
function
słowo kluczowe jest niepotrzebną niekompatybilnością z POSIX. Po prostu zostaw to:xx() { ...
#bash
, odpowiedź brzmi „zamiast tego użyj funkcji” ; aliasy nie mogą nic zrobić poza rozwijaniem przedrostków, co nie jest przydatne, jeśli chcesz na przykład rozgałęziać się na argumentach.Od Bash 2.04 istnieje trzeci (łatwiejszy) sposób, poza używaniem funkcji lub ucieczką, jak to zrobił @ffledgling: użycie składni literału ciągu ( tutaj jest doskonała odpowiedź ).
Na przykład, jeśli chcesz utworzyć alias tego użytkownika online , skończy się to na:
alias snap-removedisabled=$'snap list --all | awk \'$5~"disabled"{print $1" --revision "$3}\' | xargs -rn3 snap remove'
Musisz więc tylko dodać
$
przed ciągiem i uciec przed pojedynczymi cudzysłowami.Powoduje to ostrzeżenie o sprawdzaniu powłoki, które prawdopodobnie można bezpiecznie wyłączyć za pomocą
# shellcheck disable=SC2139
.źródło