쉘스크립트에서 애플리케이션으로 별표(와일드카드)를 전달하는 bash 확장을 중지할 수 없습니다.

쉘스크립트에서 애플리케이션으로 별표(와일드카드)를 전달하는 bash 확장을 중지할 수 없습니다.

따옴표를 사용하지 않고 별표 ["*"] 와일드카드를 응용 프로그램에 전달해야 하는 쉘 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고려할 수 있는 인용( 또는 )에 대한 \*또 다른 대안입니다.'*'"*"

관련 정보