it-roy-ru.com

Комментирование набора строк в сценарии оболочки

Мне было интересно, если есть способ закомментировать набор строк в сценарии Shell .. Как я могу это сделать? Мы можем использовать/* */на других языках программирования . Это наиболее полезно, когда я конвертирую/использую/изменяю другой скрипт И я хочу сохранить исходные строки вместо удаления.

Найти громоздкую работу и поставить префикс # для всех неиспользуемых строк.

Допустим, в сценарии есть 100 строк в последующих строках, которые не должны использоваться ... Я хочу закомментировать их все за один раз. Это возможно?

49
Vijay
if false
then

...code...

fi

false всегда возвращает false, поэтому это всегда пропускает код.

46
Artelius

Самый универсальный и безопасный метод - поместить комментарий в пустую кавычку here-document, например так:

<<"COMMENT"
    This long comment text includes ${parameter:=expansion}
    `command substitution` and $((arithmetic++ + --expansion)).
COMMENT

Заключение приведенного выше разделителя COMMENT необходимо, чтобы предотвратить расширение параметра , Подстановку команд и арифметическое расширение, что могло бы произойти В противном случае, как указано в руководстве Bash states и стандарте POSIX Shell определяет .

В вышеприведенном случае отсутствие кавычек COMMENT приведет к тому, что переменной parameter Будет присвоен текст expansion, если она будет пустой или неустановленной, выполнит команду command substitution, увеличит переменную arithmetic и уменьшит Переменную expansion.

Сравнивая другие решения с этим:

Использование if false; then comment text fi требует, чтобы текст комментария был синтаксически корректным Bash-кодом .__, тогда как естественные комментарии часто бывают нет, если Только для возможных несбалансированных апострофов. То же самое касается конструкции : || { comment text }

Помещение комментариев в аргумент команды void с одинарными кавычками, как в :'comment text', имеет недостаток невозможности включать апострофы. Аргументы в двойных кавычках , Как и в :"comment text", по-прежнему подвержены расширению параметров, замене команд .__ и расширению арифметики, так же, как и содержимое документа без кавычек Here, и могут привести к побочным эффектам, описанным выше.

Использование сценариев и средств редактора для автоматического добавления префикса каждой строки в блоке К «#» имеет свои преимущества, но не дает точного ответа на вопрос.

44
spbnick

Вы также можете разместить многострочные комментарии, используя:

: '
comment1comment1
comment2comment2
comment3comment3
comment4comment4
'

Согласно справочнику Bash для встроенных команд Bourne Shell

: (двоеточие)

: [аргументы]

Ничего не делайте, кроме расширения аргументов и выполнения перенаправлений. Статус возврата равен нулю.

Спасибо Икраму за то, что он указал на это в сообщении Сценарий оболочки поместил многострочный комментарий

26
asev69

Вы можете использовать «здесь» документ без команды, чтобы отправить его.

#!/bin/bash
echo "Say Something"
<<COMMENT1
    your comment 1
    comment 2
    blah
COMMENT1
echo "Do something else"

Справочник Википедии

20
Buggabill

Текстовые редакторы имеют удивительную функцию под названием поиск и замена. Вы не говорите, какой редактор вы используете, но поскольку сценарии Shell, как правило, * nix, а я использую VI, вот команда для комментирования строк с 20 по 50 некоторого сценария Shell:

:20,50s/^/#/
9
kdgregory
: || {
your code here
your code here
your code here
your code here
}
4
jj_5698

Согласно этому сайт :

#!/bin/bash
foo=bar
: '
This is a test comment
Author foo bar
Released under GNU 
'

echo "Init..."
# rest of script
1
user2763554

Что если вы просто включите свой код в функцию?

Итак, это:

cd ~/documents
mkdir test
echo "useless script" > about.txt

Становится так:

CommentedOutBlock() {
  cd ~/documents
  mkdir test
  echo "useless script" > about.txt
}
1
Buksy

В зависимости от того, какой редактор вы используете, есть несколько ярлыков для комментирования блока строк.

Другой обходной путь - поместить ваш код в условный блок if (0);)

0
Carlos Tasada