쉘 스크립트에 명령줄 인수로 '*' 전달

쉘 스크립트에 명령줄 인수로 '*' 전달

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 '*'

관련 정보