Jak komentować wieloliniowe polecenia w skryptach powłoki?


19

Podczas wywoływania długich, obciążających przełączniki poleceń, dobrą praktyką jest pisanie ich w skryptach powłoki. Czy istnieje prosty sposób komentowania wierszy w takich skryptach? Próbowałem następujących metod, ale żadna z nich nie działa.

# the \ is also commented out, resulting in "command" and "--good-switch".
command \
  #--bad-switch \
  --good-switch \

# seems to send an extra argument to the command
command \
  \ #--bad-switch \
  --good-switch
shell 

1
Drugi powoduje wysłanie spacji jako argumentu ( \ ucieka od następnego znaku, który „ukrywa” nowe linie, ale spacje są znaczące).
geekozaur

Odpowiedzi:


14

Może to być opcja: zapisz polecenie i argumenty w tablicy, a następnie wykonaj je później

# build the command
cmd=( ls
        -F
      # -a   # comment out this option temporarily
        -l
    )
# $cmd is now an array with 3 elements

# execute it
"${cmd[@]}"

To jest bashtylko…
Socob

3

Zawsze komentowałem te zaraz po poleceniu.

command \
  --good-switch
# --bad-switch          with explanation here, if needed

0

Problem polega na tym, że ukośniki są usuwane przed parsowaniem wiersza, więc pierwsze polecenie jest przetwarzane tak, jakbyś napisał command #--bad-switch --good-switch. Jeśli masz naprawdę długą sekwencję poleceń, możesz na przykład napisać blok komentarza wiersz po wierszu powyżej lub poniżej, wyjaśniając je kolejno, lub możesz zapisać parametry w zmiennej (chociaż często powoduje to cytowanie problemów z znaki specjalne).


1
Wydaje się, że tak nie jest. --good-switchjest interpretowane jako polecenie.


0

komentarz hamuje łańcuch połączonych linii, więc najprostszym rozwiązaniem byłoby przeniesienie komentowanych linii na końcu listy.

command \
  --good-switch \
  # --bad-switch \

Jeśli nie chcesz zmieniać kolejności, możesz użyć :polecenia (narzędzie dwukropka, które nic nie robi), aby utrzymać nienaruszone połączone linie:

command \
  `: --bad-switch `\
  --good-switch \

Testowałem z tym:

function command { 
  echo "num args:" $#;
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.