Ответ 1
if false
then
...code...
fi
false
всегда возвращает false, поэтому он всегда пропускает код.
Мне было интересно, есть ли способ прокомментировать набор строк в оболочке script. Как я мог это сделать? Мы можем использовать /* */в других языках программирования. Это наиболее полезно, когда я конвертирую/использую/изменяю другой script и я хочу сохранить исходные строки вместо удаления.
Кажется, громоздкая задача найти и префикС# для всех строк, которые не используются.
Допустим, что в script есть 100 строк в последующих строках, которые не используются. Я хочу прокомментировать их все за один раз. Возможно ли это?
if false
then
...code...
fi
false
всегда возвращает false, поэтому он всегда пропускает код.
Самый универсальный и безопасный метод заключается в том, чтобы оставить комментарий в недействительной цитате
here-document
, например:
<<"COMMENT"
This long comment text includes ${parameter:=expansion}
`command substitution` and $((arithmetic++ + --expansion)).
COMMENT
Указание разделителя COMMENT
выше необходимо для предотвращения параметра
расширение, замена команд и арифметическое расширение, что произойдет
в противном случае, как Bash ручной состояния и стандартная оболочка POSIX указывает.
В приведенном выше случае не цитирование COMMENT
приведет к переменной parameter
присваивается текст expansion
, если он пуст или не задан, выполнение команды
command substitution
, увеличивая переменную arithmetic
и уменьшая
переменная expansion
.
Сравнивая другие решения с этим:
Использование if false; then comment text fi
требует, чтобы текст комментария был
синтаксически правильный код Bash, тогда как естественные комментарии часто отсутствуют, если
только для возможных несбалансированных апострофов. То же самое касается : || { comment text }
построить.
Помещение комментариев в одноколейный аргумент команды void, как и в :'comment
text'
, имеет недостаток неспособности включить апострофы. Дважды цитируемый
аргументы, как и в :"comment text"
, по-прежнему подлежат расширению параметров,
подстановка команд и арифметическое расширение, то же, что и без кавычек
здесь-документ и может привести к побочным эффектам, описанным выше.
Использование сценариев и средств редактирования для автоматического префикса каждой строки в блок с '#' имеет некоторые достоинства, но точно не отвечает на вопрос.
Вы также можете разместить многострочные комментарии, используя:
: '
comment1comment1
comment2comment2
comment3comment3
comment4comment4
'
В соответствии с Bash Ссылка для Встроенные оболочки Bourne
: (двоеточие)
: [arguments]
Не делайте ничего, кроме расширения аргументов и выполнения перенаправления. Статус возврата равен нулю.
Благодаря Ikram за то, что вы указали это в сообщении Shell script, разместите несколько комментариев по строке
Вы можете использовать документ "здесь" без команды для отправки.
#!/bin/bash
echo "Say Something"
<<COMMENT1
your comment 1
comment 2
blah
COMMENT1
echo "Do something else"
Текстовые редакторы имеют удивительную функцию, называемую поиском и заменой. Вы не говорите, какой редактор вы используете, но поскольку сценарии оболочки имеют тенденцию быть * nix, и я использую VI, здесь команда для комментариев строк от 20 до 50 некоторой оболочки script:
:20,50s/^/#/
: || {
your code here
your code here
your code here
your code here
}
Что делать, если вы просто вставляете свой код в функцию?
Итак, это:
cd ~/documents
mkdir test
echo "useless script" > about.txt
Становится следующим:
CommentedOutBlock() {
cd ~/documents
mkdir test
echo "useless script" > about.txt
}
В зависимости от редактора, который вы используете, есть несколько ярлыков для комментариев блока строк.
Другим обходным решением было бы поставить ваш код в условный блок if (0);)
В соответствии с этим сайт:
#!/bin/bash
foo=bar
: '
This is a test comment
Author foo bar
Released under GNU
'
echo "Init..."
# rest of script
Этот однострочный Perl выделяет строки с 1 по 3 файла orig.sh
включительно (где первая строка пронумерована 0) и записывает прокомментированную версию в cmt.sh
.
perl -n -e '$s=1;$e=3; $_="#$_" if $i>=$s&&$i<=$e;print;$i++' orig.sh > cmt.sh
Очевидно, вы можете изменить граничные числа по мере необходимости.
Если вы хотите отредактировать файл на месте, он еще короче:
perl -in -e '$s=1;$e=3; $_="#$_" if $i>=$s&&$i<=$e;print;$i++' orig.sh
$ cat orig.sh
a
b
c
d
e
f
$ perl -n -e '$s=1;$e=3; $_="#$_" if $i>=$s&&$i<=$e;print;$i++' orig.sh > cmt.sh
$ cat cmt.sh
a
#b
#c
#d
e
f