특정 디렉토리에 여러 폴더를 압축하여 각 폴더에 대한 zip 파일을 만들고 싶습니다. 이를 위해 다음 명령을 사용합니다.
$ find -maxdepth 1 -mindepth 1 -type d | xargs -I@ zip -r @.zip @
이것은 예상대로 작동합니다.
#
그러나 우연히 다음 대신 대체 문자열로 사용했을 때 예상하지 못한 동작을 발견했습니다 @
.
$ find -maxdepth 1 -mindepth 1 -type d | xargs -I# zip -r #.zip #
zip error: Invalid command arguments (cannot write zip file to terminal)
zip error: Invalid command arguments (cannot write zip file to terminal)
... and so on (the same message repeated for every folder)
#
댓글은 일반적으로 켜져 있으므로 여기에 문제가 있는 것이 분명합니다. 그러나 명령줄이 실제로는 될 것이라고 생각했을 것입니다 find -maxdepth 1 -mindepth 1 -type d | xargs -I
. 왜냐하면 첫 번째 줄부터 포함하여 모든 것이 #
주석이고 제거되었기 때문입니다.
그러나 분명히 zip
명령을 이행했다. 왜?
답변1
주석( bash
셸 내)은 역할에 의해 소개됩니다 #
. 그러나 이는 #
문자가 인용되지 않고 단어의 첫 번째 문자(토큰)인 경우에만 발생합니다.
#
단어의 첫 번째 문자가 아닌 다른 문자로 인용되거나 발생하는 경우 주석이 도입되지 않습니다.
비교하다:
$ echo this is a #comment
this is a
$ echo this is not a#comment
this is not a#comment
$ echo not a '#comment'
not a #comment
대화형 셸에서 주석은 다음과 같습니다.안 돼요interactive_comments
쉘 옵션이 꺼진 경우(기본적으로 켜짐) 도입됩니다.
$ shopt -u interactive_comments
$ echo not a #comment
not a #comment