Bash에는 다음 쉘 스크립트가 있습니다.
function zzqfoo {
python ~/my/dir/path/zzqfoo.py $(abspath $1) $2
}
아이디어는 로컬 파일 이름을 사용하여 명령줄에서 Python 프로그램 "zzqfoo.py"를 호출하는 것이지만 zzqfoo.py는 $(abspath $1)
.
그런데 내가 전화할 때
>>> zzqfoo myfile *
쉘이 깨지고 *
God Knows를 두 번째 인수로 zzqfoo.py에 보냅니다.
피해를 방지하는 방법은 무엇입니까 *
? (zzqfoo.py가 두 번째 명령줄 인수를 있는 그대로 수신할 것으로 예상합니다.)
감사해요!
답변1
쉘이 깨지고
*
God Knows를 두 번째 인수로 zzqfoo.py에 보냅니다.
"중단"되지 않습니다 *
. 항상 수행하는 작업을 수행합니다. 즉, *
현재 디렉터리의 파일 및 디렉터리 이름과 일치하는 와일드카드로 확장됩니다.
당신은:
*
매개변수로 전달할 때 인용- quote
$1
등이$2
함수에 사용되면 쉘은 이에 대해 단어 분할이나 와일드카드 확장을 수행하지 않습니다.
그래서:
function zzqfoo {
python ~/my/dir/path/zzqfoo.py "$(abspath "$1")" "$2"
}
그리고 실행하세요:
zzqfoo myfile '*'
답변2
인용하자면:
$ zzqfoo myfile "*"
또는
$ zzqfoo myfile \*
또는
$ zzqfoo myfile '*'