Как комментировать многострочные команды в скриптах оболочки?

19

Когда вы вызываете длинные команды с переключением, рекомендуется писать их в сценариях оболочки. Есть ли простой способ комментировать строки в таких скриптах? Я пробовал следующие методы, но ни один не работает.

# 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

источник
1
Второй вызывает отправку пробела в качестве аргумента ( \ экранирует следующий символ, который «скрывает» переводы строки, но делает пробелы значимыми).
geekosaur

Ответы:

14

Это может быть вариант: сохранить команду и аргументы в массиве, а затем выполнить ее после

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

# execute it
"${cmd[@]}"
Гленн Джекман
источник
Это только bash...
Сокоб
3

Я всегда перемещал прокомментированные сразу после команды.

command \
  --good-switch
# --bad-switch          with explanation here, if needed
geekosaur
источник
0

Проблема в том, что косые черты удаляются до разбора строки, поэтому первая команда разбирается так, как если бы вы написали command #--bad-switch --good-switch. Если у вас очень длинная последовательность команд, вы можете, например, написать построчный блок комментариев над или под ним, объясняя каждую из них по очереди, или вы можете сохранить параметры в переменной (хотя это часто приводит к головной боли при цитировании с специальные символы).

l0b0
источник
1
Кажется, это не так. --good-switchинтерпретируется как команда.
0

комментарий тормозит цепочку связанных строк, поэтому самое простое решение - переместить закомментированные строки в конец списка.

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

Если вы не хотите менять порядок, вы можете использовать :команду (утилита двоеточия, которая ничего не делает) для сохранения целостности подключенных линий:

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

Я проверил с этим:

function command { 
  echo "num args:" $#;
}
rubo77
источник