Есть ли простой способ закомментировать блок кода в сценарии оболочки?
Есть ли простой способ закомментировать блок кода в сценарии оболочки?
Ответы:
В Баш:
#!/bin/bash
echo before comment
: <<'END'
bla bla
blurfl
END
echo after comment
Символ '
и '
вокруг END
разделителя важен, иначе вещи внутри блока, такие как, например, $(command)
будут проанализированы и выполнены.
EOF
Это классический пример (и !
, собственно, восклицательный знак сам по себе), но вы можете использовать SNURFLE_BURGERS
или classical_end_marker
или любое другое слово, которое не появляется в отдельной строке в закомментированном материале. Я бы не хотел экспериментировать с пробелами и т. Д., Но слово вполне могло бы с ними работать.
:
), которая не читает входные данные и всегда завершается успешно, и отправляет «комментарий» в качестве входных данных. Не так много для этого.
Блочного комментария к сценарию оболочки нет.
Используя vi
(да vi
), вы можете легко комментировать строки от n до m
<ESC>
:10,100s/^/#/
(это означает, что от строки 10 до 100 строка начала замены (^) со знаком #.)
и комментарий с
<ESC>
:10,100s/^#//
(это означает, что от строки 10 до 100 строка замены замещает начало (^), за которым следует знак # с пометкой //.)
vi
почти универсален везде, где есть /bin/sh
.
|noh
в конец. Канал отделяет дополнительные команды и не noh
предназначен для подсветки. Выделение поискового запроса автоматически возобновится при следующем поиске. Пример::10,100s/^/#/g|noh
<SHIFT>+G 10 <ENTER>
тогда 0
или любым другим способом навигации). Затем используйте <CTRL>+V
для входа в режим визуального блока и выделите начало всех строк, которые вы хотите прокомментировать (в этом примере 90 J
). Затем нажмите, SHIFT+I
чтобы вставить перед выделенным блоком. Введите знак комментария (например #
) и нажмите, <ESC>
чтобы закончить префикс. Это объяснение звучит очень долго, но по моему опыту оно намного быстрее на практике.
Ты можешь использовать:
if [ 1 -eq 0 ]; then
echo "The code that you want commented out goes here."
echo "This echo statement will not be called."
fi
if [ ];
также работает.
if false;
. stackoverflow.com/a/18019516/2097284
Следующие должны работать sh
, bash
, ksh
и zsh
.
Комментируемые блоки кода могут быть помещены внутрь BEGINCOMMENT
и ENDCOMMENT
:
[ -z $BASH ] || shopt -s expand_aliases
alias BEGINCOMMENT="if [ ]; then"
alias ENDCOMMENT="fi"
BEGINCOMMENT
echo "This line appears in a commented block"
echo "And this one too!"
ENDCOMMENT
echo "This is outside the commented block"
Выполнение вышеуказанного кода приведет к:
This is outside the commented block
Чтобы раскомментировать прокомментированные таким образом блоки кода, скажем,
alias BEGINCOMMENT="if : ; then"
вместо того
alias BEGINCOMMENT="if [ ]; then"
в приведенном выше примере.
если вы можете увернуться от одинарных кавычек:
__='
blah blah comment.
'
Используйте, : '
чтобы открыть и '
закрыть.
Например:
: '
This is a
very neat comment
in bash
'
Это из примера Вегаса, найденного здесь
В Vim:
shift-V
(войдите в визуальный режим), вверху вниз выделите строки в блоке:s/^/#/
команда будет выглядеть так:
:'<,'>s/^/#
нажмите ввод
например
shift-V
jjj
:s/^/#
<enter>
:s/^#/
Вы можете использовать режим Visual Block Vi / Vim, который предназначен для таких вещей:
Ctrl-V
Highlight first element in rows you want commented
Shift-i
#
esc
Раскомментируйте:
Ctrl-V
Highlight #'s
d
l
Это интерактивный способ Vi делать подобные вещи, а не считать или читать номера строк.
Наконец, в Gvim вы используете ctrl-q для перехода в режим Visual Block, а не ctrl-v (потому что это ярлык для вставки).
Честно говоря, почему так много перерабатывающих ...
Я считаю плохой практикой писать активный код для генерации пассивного кода.
Мое решение: большинство редакторов имеют режим выбора блока. Просто используйте его, чтобы добавить # ко всем строкам, которые вы хотите закомментировать. Подумаешь...
Пример блокнота:
Для создания: Alt - mousedrag вниз, нажмите #.
Для удаления: Alt-mousedrag вниз, стрелка вправо, удалить.
Разновидностью хитрости здесь-документа в принятом ответе sunny256 является использование ключевых слов Perl для комментариев. Если ваши комментарии на самом деле представляют собой какую-то документацию, вы можете начать использовать синтаксис Perl внутри закомментированного блока, что позволит вам распечатать его красиво отформатированным, преобразовать в man-страницу и т. Д.
Что касается оболочки, вам нужно только заменить 'END'
на '=cut'
.
echo "before comment"
: <<'=cut'
=pod
=head1 NAME
podtest.sh - Example shell script with embedded POD documentation
etc.
=cut
echo "after comment"
(Найдено в разделе « Внедрение документации в сценарий оболочки »)
Другой режим: если ваш редактор не имеет опции комментариев BLOCK,
СДЕЛАНО
это работает с любым редактором
Мне нравится одна строка открывать и закрывать:
if [ ]; then ##
...
...
fi; ##
«##» помогает мне легко найти начало и конец комментария к блоку. Я могу поставить число после «##», если у меня их будет куча. Чтобы отключить комментарий, я просто вставляю «1» в «[]». Я также избегаю некоторых проблем с одиночными кавычками в комментируемом блоке.