Як коментувати багаторядкові команди в скриптах оболонки?


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
shell 

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

0

Проблема полягає в тому, що косої риски видаляються до розбору рядка, тому перша команда аналізується так, як ніби ви написали command #--bad-switch --good-switch. Якщо у вас дійсно довга послідовність команд, ви можете, наприклад, написати рядок коментарів рядка за рядком вище або під ним, пояснюючи кожен по черзі, або ви можете зберігати параметри в змінній (хоча це часто призводить до цитування головних болів з спеціальні символи).


1
Здається, це не так. --good-switchтрактується як команда.


0

коментар гальмує ланцюг зв’язаних ліній, тому найпростішим рішенням було б переміщення коментованих рядків у кінці списку.

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

Якщо ви не хочете змінювати порядок, можете скористатися :командою (утиліта двокрапки, яка нічого не робить), щоб зберегти підключені лінії недоторканими:

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

Я перевірив це:

function command { 
  echo "num args:" $#;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.