Подтвердить что ты не робот

Комментируя набор строк в оболочке script

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

Кажется, громоздкая задача найти и префикС# для всех строк, которые не используются.

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

4b9b3361

Ответ 1

if false
then

...code...

fi

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

Ответ 2

Самый универсальный и безопасный метод заключается в том, чтобы оставить комментарий в недействительной цитате 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", по-прежнему подлежат расширению параметров, подстановка команд и арифметическое расширение, то же, что и без кавычек здесь-документ и может привести к побочным эффектам, описанным выше.

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

Ответ 3

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

: '
comment1comment1
comment2comment2
comment3comment3
comment4comment4
'

В соответствии с Bash Ссылка для Встроенные оболочки Bourne

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

: [arguments]

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

Благодаря Ikram за то, что вы указали это в сообщении Shell script, разместите несколько комментариев по строке

Ответ 4

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

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

Ссылка в Wikipedia

Ответ 5

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

:20,50s/^/#/

Ответ 6

: || {
your code here
your code here
your code here
your code here
}

Ответ 7

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

Итак, это:

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

Становится следующим:

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

Ответ 8

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

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

Ответ 9

В соответствии с этим сайт:

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

echo "Init..."
# rest of script

Ответ 10

Этот однострочный 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

Demo

$ 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