정확히 어떤 기능인가요?"핵심 단어set
" Bash 쉘에서 명령 할당 옵션이 있습니까?
옵션:
set -o keyword
또는
set -k
간단한 예만으로도 이해하기에 충분합니다.
답변1
일반적으로 명령에 대한 환경 변수를 삽입하려면 다음과 같이 명령 앞의 이름에 값을 할당합니다.
VARIABLE=value bash -c 'echo "$1 $VARIABLE"' bash hello
이는 bash -c 'echo "$VARIABLE"' bash hello
명령 환경에서 실행되고 문자열로 설정됩니다 VARIABLE
. value
이 경우 명령은 인라인 스크립트의 첫 번째 명령줄 인수와 환경 변수에서 인쇄 hello value
합니다 .hello
value
set -o keyword
(또는 set -k
) in bash
(비표준 쉘 옵션)을 사용하면 명령줄 어디에서나 할당이 가능합니다.
$ set -k
$ bash -c 'echo "$1 $VARIABLE"' bash hello VARIABLE=value
hello value
$ bash -c 'echo "$1 $VARIABLE"' bash VARIABLE=value hello
hello value
$ bash -c 'echo "$1 $VARIABLE"' VARIABLE=value bash hello
hello value
$ bash -c VARIABLE=value 'echo "$1 $VARIABLE"' bash hello
hello value
$ bash VARIABLE=value -c 'echo "$1 $VARIABLE"' bash hello
hello value
나는 이 옵션이 "야생에서" 사용되는 것을 본 적이 없으며 명령이 구문 분석되는 방식을 근본적으로 변경하기 때문에 매우 특정한 상황에서만 거의 사용되지 않을 것이라고 가정합니다.
답변2
매뉴얼에서:
-케이
할당문 형식의 모든 인수는 명령 이름 앞의 인수뿐만 아니라 명령 환경에 배치됩니다.
몇 가지 실험을 거친 후:
$ bash -c '
env | grep -e foo -e baz
for ((i=0; i<=$#; i++)); do echo "$i = ${!i}"; done
' foo=bar baz=qux
0 = foo=bar
1 = baz=qux
var=val 매개변수는 일반 매개변수입니다.
하지만 함께set -o keyword
$ set -k
$ bash -c '
env | grep -e foo -e baz
for ((i=0; i<=$#; i++)); do echo "$i = ${!i}"; done
' foo=bar baz=qux
foo=bar
baz=qux
0 = bash
var=val 인수가 감지되어 매개변수에서 제거되고 환경에 배치됩니다.
답변3
set -o keyword
"keyword"로 정의된 바이너리 bash 옵션 중 하나를 설정할 수 있습니다. "keyword"를 실제 옵션 이름으로 바꿔야 합니다. 예를 들어 아래와 같이 xtrace로 바꿀 수 있습니다.
이 옵션은 켜거나 끄는 데 2개의 값을 사용합니다(예: set -o xtrace
추적 켜기).
이 옵션을 재설정하려면 다음을 사용하세요.set +o xtrace
모든 옵션 설정 목록은 키워드를 생략하여 얻을 수 있으며 set -o
, set +o
옵션 설정 목록을 표시하는 대체 보기인 모든 옵션 나열에서는 "키워드" 대신 사용할 모든 옵션 이름을 제공합니다.
set -k
그 자체는 환경 할당 구문을 변경하는 옵션이며 다른 답변에 설명되어 있습니다.