따옴표를 사용하지 않고 별표 ["*"] 와일드카드를 응용 프로그램에 전달해야 하는 쉘 bash 스크립트가 있습니다. 나는 몇 시간 동안 읽었으며 쉘 스크립트를 호출할 때 항상 "set -f"를 사용하는 것을 발견했지만 이것은 아무 것도 수행하지 않습니다. 어쩌면 내가 뭔가를 오해하고 있을지도 모르지만 무엇을 이해하지 못합니다.
저는 모노 프레임워크를 사용하여 C# 애플리케이션을 작성하고 있는데 bash에서의 호출은 다음과 같습니다.
#!/bin/bash
set -f
mono app.exe "$@"
"runit"이라는 쉘 스크립트는 다음과 같이 사용됩니다.
달리다 *
누구든지 이것을 설명할 수 있나요? 이 스크립트에서 활성 셸 옵션을 출력해 보았지만 아무 것도 나타나지 않았습니다.
답변1
그리고
#!/bin/bash
set -f
mono app.exe "$@"
set -f
"$@"
큰따옴표로 묶인 인수 배열( )은 더 이상 확장되지 않으므로 아무런 효과가 없습니다 .
"$@"
값이 있는 매개변수를 포함 하면 변경 *
되지 않습니다 mono app.exe
.
문제는 이 래퍼 스크립트를 호출하는 셸이 set +f
기본적으로 하는 것처럼 별표를 확장하려고 한다는 것입니다.
set -f
래퍼가 아닌 호출 셸에서 이 작업을 수행해야 합니다 .
(기본값) 의 경우 백슬래시( )는 set +f
고려할 수 있는 인용( 또는 )에 대한 \*
또 다른 대안입니다.'*'
"*"