저는 bash 스크립팅에 익숙하지 않고 상당히 잘 진행되었지만 문제가 발생했습니다.
슬래시 (/)를 사용하는 스크립트를 만들려고하는데 /: is a directory.
오류 메시지가 계속 표시됩니다.
기본적으로 터미널의 프로그램에 test/(hello)
명령을 전달해야합니다. 따라서 작동하도록 백 슬래시를 추가했습니다. test\/\(hello\)
,이 오류가 발생합니다. 여기에 무엇이 잘못 되었나요?
댓글
- 어디 에서 스크립트가 슬래시를 사용하나요? 인수 를 명령 / 스크립트에 성공적으로 인수 전달한 것 같지만 스크립트에 오류가 있습니다. 더 자세한 예를 들어 주시겠습니까? ' 줄 번호 등을 언급하지 않습니까?
답변
이것은 합격하지 못한 경우에만 발생해야합니다. 인수 앞에 명령. 다음과 같은 명령을 호출해야합니다.
command [args ...]
이렇게 호출하면 작동합니다.
$ echo test/\(hello\) test/(hello)
기록을 위해 모든 메타 문자를 이스케이프하는 대신 인수를 인용하는 것이 일반적으로 훨씬 쉽고 읽기 쉽습니다. "
및 "
(이에 대한 좋은 정보는 여기 에 있습니다).
댓글
- 찬성했습니다. 쉘은 슬래시로만 구분 된 텍스트를 명령 / 인수가 아닌 디렉토리로 해석합니다. 슬래시는 예를 들어 Perl 스크립트 (
Getopt::Long
구성 또는 자체 롤링 필요)의 인수에 사용할 수 있지만 여전히 명령과 인수 사이에 공백이 필요합니다. 이것은 셸 요구 사항입니다.
답변
정확한 문자열 를 프로그램에 적용하려면 작은 따옴표로 묶습니다.
someprogram "test/(hello)"
작은 따옴표 문자를 제외한 모든 문자는 작은 따옴표 사이에서 문자 그대로 해석됩니다. 그 자체. 문자열에 작은 따옴표 문자가 필요한 경우 "\""
(리터럴 문자열 끝, 다음 문자 인용, 문자 그대로 해석되는 작은 따옴표, 리터럴 문자열 시작)로 전달합니다.
echo "Lasciate ogne speranza, voi ch"\""entrate"
여기에 표시된 오류 메시지와 관련이 없습니다. /: is a directory
는 /
를 프로그램으로 실행하려했음을 의미합니다. 아마도 프로그램에 대한 전체 경로를 쓰려고했지만 추가 공백을 남긴 곳이있을 것입니다.
/ path/to/program
다른 문장 부호가있을 수 있습니다. 덜 분명하거나 해당 메시지의 제어 문자입니다. 디버깅을 용이하게하려면 스크립트의 두 번째 줄, 첫 번째 #!
줄 바로 뒤에 set -x
를 입력하면 셸이 실행되는 모든 라인의 추적.