Jak umieścić komentarz liniowy dla polecenia wielowierszowego [duplikat]
To pytanie ma już odpowiedź tutaj:
- Komentowanie w skrypcie Bash 6 odpowiedzi
Wiem, jak napisać polecenie Wielowierszowe w skrypcie Bash, ale jak Mogę dodać komentarz dla każdej linii w poleceniu wielowierszowym?
CommandName InputFiles \ # This is the comment for the 1st line
--option1 arg1 \ # This is the comment for the 2nd line
--option2 arg2 # This is the comment for the 3nd line
Ale niestety komentarz po znaku \
złamie polecenie.
4 answers
Obawiam się, że w ogóle nie możesz zrobić tego, o co prosisz. Najlepsze, co możesz zrobić, to komentarz w wierszach przed poleceniem, pojedynczy komentarz na końcu wiersza poleceń lub komentarz po poleceniu.
Nie można w ten sposób przeplatać komentarzy wewnątrz polecenia. \
s wyrażają intencję scalania linii, więc dla wszystkich intencji i celów próbujesz przeplatać komentarze w jednej linii, co i tak nie działa, ponieważ \
musi być w koniec linii, aby mieć taki efekt.
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
2017-05-10 21:29:51
Tak to robię. Zasadniczo używając backtick Basha zastąpienie polecenia można umieścić te komentarze w dowolnym miejscu wzdłuż długiej linii poleceń, nawet jeśli są podzielone na linie. Umieściłem polecenie echo przed Twoim przykładem, abyś mógł wykonać przykład i zobaczyć, jak to działa:
echo CommandName InputFiles `#1st comment` \
--option1 arg1 `#2nd comment` \
--option2 arg2 `#3rd comment`
Kolejny przykład, w którym można umieścić wiele komentarzy w różnych punktach w jednej linii:
some_cmd --opt1 `#1st comment` --opt2 `#2nd comment` --opt3 `#3rd comment`
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
2017-12-06 14:59:48
Można zapisać argumenty w tablicy:
args=(InputFiles # This is the comment for the 1st line
# You can have whole lines of comments in between, useful for:
#--deprecated-option # This isn't use any more
--option1 arg1 # This is the comment for the 2nd line
# And even blank lines in between for readability
--option2 arg2 # This is the comment for the 3nd line
)
CommandName "${args[@]}"
Jednak wydaje mi się, że wygląda to nieco hakerski, jeśli jest to tylko w celu umożliwienia komentarzy dla każdego argumentu. Dlatego po prostu przepisałbym komentarz tak, aby odwoływał się do poszczególnych argumentów i umieszczał go ponad całym poleceniem.
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
2018-02-12 19:27:14
Na podstawie komentarza pjh do inna odpowiedź na to pytanie , zastępując IFS
zmienną, o której wiadomo, że nie zawiera znaków innych niż białe znaki.
comment=
who ${comment# This is the command} \
-u ${comment# This is the argument}
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
2017-05-23 12:34:45