bash에서 `set -o 키워드`는 무엇을 합니까?

bash에서 `set -o 키워드`는 무엇을 합니까?

정확히 어떤 기능인가요?"핵심 단어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합니다 .hellovalue

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그 자체는 환경 할당 구문을 변경하는 옵션이며 다른 답변에 설명되어 있습니다.

관련 정보