Милый трюк - пока ключевое слово 'END' (которое, конечно, выбрано пользователем) не появляется в отдельной строке внутри закомментируемого материала.
Джонатан Леффлер
9
@kalengi: Да; слово, используемое в кавычках, может быть чем угодно; EOFЭто классический пример (и !, собственно, восклицательный знак сам по себе), но вы можете использовать SNURFLE_BURGERSили classical_end_markerили любое другое слово, которое не появляется в отдельной строке в закомментированном материале. Я бы не хотел экспериментировать с пробелами и т. Д., Но слово вполне могло бы с ними работать.
Джонатан Леффлер
4
Это определенно работает, но кто-нибудь может уточнить, как это работает? Спасибо
mbbce
5
@MB_CE см stackoverflow.com/questions/32126653/... . Тем не менее, он запускает команду ( :), которая не читает входные данные и всегда завершается успешно, и отправляет «комментарий» в качестве входных данных. Не так много для этого.
Чарльз Даффи
2
Я считаю невероятно уродливым и запутанным написание активного кода для создания пассивного кода ... просто используйте старый добрый режим выбора блока и нажмите #; в чем проблема?
Rusty75
90
Блочного комментария к сценарию оболочки нет.
Используя vi(да vi), вы можете легко комментировать строки от n до m
<ESC>:10,100s/^/#/
(это означает, что от строки 10 до 100 строка начала замены (^) со знаком #.)
и комментарий с
<ESC>:10,100s/^#//
(это означает, что от строки 10 до 100 строка замены замещает начало (^), за которым следует знак # с пометкой //.)
Хороший трюк с регулярным выражением на vi для размещения # перед строками.
Атик Рахман
5
Просто подсказка - если вы используете vim, и это заканчивается выделением начала каждой строки, добавьте |nohв конец. Канал отделяет дополнительные команды и не nohпредназначен для подсветки. Выделение поискового запроса автоматически возобновится при следующем поиске. Пример::10,100s/^/#/g|noh
Мэтью
Мне нужно, чтобы это было автоматизировано из сценария. Есть ли способ сделать это для файла с vi без вмешательства человека?
Тимоти Свон
1
@TimothySwan Я полагаю, что программа gawk или sed может сделать это ... каким-то образом.
BeowulfNode42
Мой предпочтительный способ комментирования (или префикса) блока с помощью vi: переход к началу строки, которую вы хотите начать комментировать (например, <SHIFT>+G 10 <ENTER>тогда 0или любым другим способом навигации). Затем используйте <CTRL>+Vдля входа в режим визуального блока и выделите начало всех строк, которые вы хотите прокомментировать (в этом примере 90 J). Затем нажмите, SHIFT+Iчтобы вставить перед выделенным блоком. Введите знак комментария (например #) и нажмите, <ESC>чтобы закончить префикс. Это объяснение звучит очень долго, но по моему опыту оно намного быстрее на практике.
Ueffes
52
Ты можешь использовать:
if[1-eq 0];then
echo "The code that you want commented out goes here."
echo "This echo statement will not be called."fi
Это только кажется, работает только то, что закомментированный текст на самом деле код. Я сталкиваюсь с проблемами с комментариями с трубами и точками с запятой. Sunny256 ответ сработал.
swdev
еще более кратким будет []; используя тест, который
Джастин Дункан
27
Следующие должны работать 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
Чтобы раскомментировать прокомментированные таким образом блоки кода, скажем,
Мне это нравится. Что означает двойное подчеркивание? Насколько я могу судить, это просто имя переменной в соответствии с соглашением, что оно должно рассматриваться как личное?
chessofnerd
Также обеспечивает подсветку синтаксиса в большинстве редакторов и может вызываться при необходимости с помощью $ __, хотя для ясности я бы предложил имя переменной, например документацию или документацию.
Джейсон Леонард
Вы также можете добавить слово local перед
ссылкой
Это должен быть лучший ответ. Просто поместите несколько фиктивных переменных вместо двойных подчеркиваний
B Abali
Пробовал это, но не получилось, потому что был -F ';' внутри блока, чтобы закомментировать.
Честно говоря, почему так много перерабатывающих ...
Я считаю плохой практикой писать активный код для генерации пассивного кода.
Мое решение: большинство редакторов имеют режим выбора блока. Просто используйте его, чтобы добавить # ко всем строкам, которые вы хотите закомментировать. Подумаешь...
Пример блокнота:
Для создания: Alt - mousedrag вниз, нажмите #.
Для удаления: Alt-mousedrag вниз, стрелка вправо, удалить.
Пользователь, скорее всего, находится в терминале. Невозможно принять среду мыши.
Гари
Они все еще существуют? Я обычно редактирую в графическом режиме и вставляю обратно, используя vi, это было бы легко обойти.
Rusty75
2
Разновидностью хитрости здесь-документа в принятом ответе 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"
«##» помогает мне легко найти начало и конец комментария к блоку. Я могу поставить число после «##», если у меня их будет куча. Чтобы отключить комментарий, я просто вставляю «1» в «[]». Я также избегаю некоторых проблем с одиночными кавычками в комментируемом блоке.
Ответы:
В Баш:
Символ
'
и'
вокругEND
разделителя важен, иначе вещи внутри блока, такие как, например,$(command)
будут проанализированы и выполнены.Для объяснения см. Этот и этот вопрос.
источник
EOF
Это классический пример (и!
, собственно, восклицательный знак сам по себе), но вы можете использоватьSNURFLE_BURGERS
илиclassical_end_marker
или любое другое слово, которое не появляется в отдельной строке в закомментированном материале. Я бы не хотел экспериментировать с пробелами и т. Д., Но слово вполне могло бы с ними работать.:
), которая не читает входные данные и всегда завершается успешно, и отправляет «комментарий» в качестве входных данных. Не так много для этого.Блочного комментария к сценарию оболочки нет.
Используя
vi
(даvi
), вы можете легко комментировать строки от n до m(это означает, что от строки 10 до 100 строка начала замены (^) со знаком #.)
и комментарий с
(это означает, что от строки 10 до 100 строка замены замещает начало (^), за которым следует знак # с пометкой //.)
vi
почти универсален везде, где есть/bin/sh
.источник
|noh
в конец. Канал отделяет дополнительные команды и неnoh
предназначен для подсветки. Выделение поискового запроса автоматически возобновится при следующем поиске. Пример::10,100s/^/#/g|noh
<SHIFT>+G 10 <ENTER>
тогда0
или любым другим способом навигации). Затем используйте<CTRL>+V
для входа в режим визуального блока и выделите начало всех строк, которые вы хотите прокомментировать (в этом примере90 J
). Затем нажмите,SHIFT+I
чтобы вставить перед выделенным блоком. Введите знак комментария (например#
) и нажмите,<ESC>
чтобы закончить префикс. Это объяснение звучит очень долго, но по моему опыту оно намного быстрее на практике.Ты можешь использовать:
источник
if [ ];
также работает.if false;
. stackoverflow.com/a/18019516/2097284Следующие должны работать
sh
,bash
,ksh
иzsh
.Комментируемые блоки кода могут быть помещены внутрь
BEGINCOMMENT
иENDCOMMENT
:Выполнение вышеуказанного кода приведет к:
Чтобы раскомментировать прокомментированные таким образом блоки кода, скажем,
вместо того
в приведенном выше примере.
источник
если вы можете увернуться от одинарных кавычек:
источник
Используйте,
: '
чтобы открыть и'
закрыть.Например:
Это из примера Вегаса, найденного здесь
источник
В Vim:
shift-V
(войдите в визуальный режим), вверху вниз выделите строки в блоке:s/^/#/
команда будет выглядеть так:
нажмите ввод
например
источник
:s/^#/
Вы можете использовать режим Visual Block Vi / Vim, который предназначен для таких вещей:
Раскомментируйте:
Это интерактивный способ Vi делать подобные вещи, а не считать или читать номера строк.
Наконец, в Gvim вы используете ctrl-q для перехода в режим Visual Block, а не ctrl-v (потому что это ярлык для вставки).
источник
Честно говоря, почему так много перерабатывающих ...
Я считаю плохой практикой писать активный код для генерации пассивного кода.
Мое решение: большинство редакторов имеют режим выбора блока. Просто используйте его, чтобы добавить # ко всем строкам, которые вы хотите закомментировать. Подумаешь...
Пример блокнота:
Для создания: Alt - mousedrag вниз, нажмите #.
Для удаления: Alt-mousedrag вниз, стрелка вправо, удалить.
источник
Разновидностью хитрости здесь-документа в принятом ответе sunny256 является использование ключевых слов Perl для комментариев. Если ваши комментарии на самом деле представляют собой какую-то документацию, вы можете начать использовать синтаксис Perl внутри закомментированного блока, что позволит вам распечатать его красиво отформатированным, преобразовать в man-страницу и т. Д.
Что касается оболочки, вам нужно только заменить
'END'
на'=cut'
.(Найдено в разделе « Внедрение документации в сценарий оболочки »)
источник
Другой режим: если ваш редактор не имеет опции комментариев BLOCK,
СДЕЛАНО
это работает с любым редактором
источник
Мне нравится одна строка открывать и закрывать:
«##» помогает мне легко найти начало и конец комментария к блоку. Я могу поставить число после «##», если у меня их будет куча. Чтобы отключить комментарий, я просто вставляю «1» в «[]». Я также избегаю некоторых проблем с одиночными кавычками в комментируемом блоке.
источник