Komentowanie zbioru wierszy w skrypcie powłoki
Zastanawiałem się, czy jest sposób na skomentowanie zestawu linii w skrypcie powłoki. Jak mogłem to zrobić? Możemy używać / * * / w innych językach programowania. Jest to najbardziej przydatne, gdy konwertuję/używam / modyfikuję inny skrypt i chcę zachować oryginalne linie zamiast usuwać.
Wydaje się kłopotliwe znalezienie i prefiks # dla wszystkich linii, które nie są używane.
Powiedzmy, że w skrypcie jest 100 linii, które nie są używane. Chcę skomentuj je wszystkie za jednym razem. Czy to możliwe?
10 answers
if false
then
...code...
fi
false
zawsze zwraca false, więc będzie to zawsze pomijać kod.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-18 12:55:46
Najbardziej wszechstronną i bezpieczną metodą jest umieszczenie komentarza w pustce cytowanej
here-document
, tak:
<<"COMMENT"
This long comment text includes ${parameter:=expansion}
`command substitution` and $((arithmetic++ + --expansion)).
COMMENT
Przytaczając powyższy ogranicznik COMMENT
jest konieczne, aby zapobiec parametrowi
Rozszerzanie, zastępowanie poleceń i rozszerzanie arytmetyczne, które następowałoby
w przeciwnym razie, jak podaje Instrukcja Bash , a standard powłoki POSIX określa .
W powyższym przypadku brak cytowania COMMENT
spowodowałby powstanie zmiennej parameter
przypisany tekst expansion
, jeśli był pusty lub wyłączony, wykonanie polecenia
command substitution
, zmienna zwiększająca arithmetic
i zmniejszająca
zmienna expansion
.
Porównując inne rozwiązania do tego:
Użycie if false; then comment text fi
wymaga, aby tekst komentarza był
poprawny składniowo Kod Bash, podczas gdy komentarze naturalne często nie są, jeśli
tylko dla możliwych niezrównoważonych apostrofów. To samo dotyczy : || { comment text }
konstruuj.
Umieszczanie komentarzy w pojedynczo cytowanym argumencie polecenia void, jak w :'comment
text'
, ma wadę niemożności dołączania apostrofów. Double-quoted
argumenty, jak w :"comment text"
, nadal podlegają rozszerzaniu parametrów,
zastępowanie poleceń i rozszerzanie arytmetyczne, takie samo jak nie cytowane
tutaj-treść dokumentu i może prowadzić do skutków ubocznych opisanych powyżej.
Używanie skryptów i narzędzi edytora do automatycznego prefiksu każdej linii w blok z ' # ' ma pewne zalety, ale nie odpowiada dokładnie na pytanie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-04 13:23:39
Możesz także dodawać komentarze Wielowierszowe używając:
: '
comment1comment1
comment2comment2
comment3comment3
comment4comment4
'
Zgodnie z referencją Bash dla Bourne Shell builtins
: (dwukropek)
: [argumenty]
Nie rób nic poza rozwijaniem argumentów i wykonywaniem przekierowań. Status powrotu wynosi zero.
Podziękowania dla Ikram za zwrócenie na to uwagi w poście skrypt powłoki umieścić komentarz wielu linii
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-25 07:18:40
Możesz użyć dokumentu "tutaj" bez polecenia, aby go wysłać.
#!/bin/bash
echo "Say Something"
<<COMMENT1
your comment 1
comment 2
blah
COMMENT1
echo "Do something else"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-18 12:56:11
Edytory tekstu mają niesamowitą funkcję o nazwie Szukaj i zastępuj. Nie mówisz jakiego edytora używasz, ale ponieważ skrypty powłoki są zazwyczaj *nix, a ja używam VI, oto polecenie komentowania linii 20 do 50 jakiegoś skryptu powłoki:
:20,50s/^/#/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-18 12:55:37
: || {
your code here
your code here
your code here
your code here
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-18 11:08:45
Co jeśli po prostu zawiń swój kod w funkcję?
Więc to:
cd ~/documents
mkdir test
echo "useless script" > about.txt
Staje się to:
CommentedOutBlock() {
cd ~/documents
mkdir test
echo "useless script" > about.txt
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-08 12:50:26
W zależności od używanego edytora istnieje kilka skrótów do komentowania bloku wierszy.
Innym obejściem byłoby umieszczenie kodu w bloku warunkowym "if (0)";)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-18 12:55:06
Zgodnie z tą stroną :
#!/bin/bash
foo=bar
: '
This is a test comment
Author foo bar
Released under GNU
'
echo "Init..."
# rest of script
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-26 04:02:08
Ten jednowierszowy Perl komentuje linie od 1 do 3 pliku orig.sh
inclusive (gdzie pierwsza linia ma numer 0) i zapisuje skomentowaną wersję do cmt.sh
.
perl -n -e '$s=1;$e=3; $_="#$_" if $i>=$s&&$i<=$e;print;$i++' orig.sh > cmt.sh
Oczywiście możesz zmienić liczby graniczne zgodnie z wymaganiami.
Jeśli chcesz edytować plik w miejscu, jest jeszcze krótszy:
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-18 13:56:37