Bash에서 위치 매개변수를 설정하는 방법

Bash에서 위치 매개변수를 설정하는 방법

~에서https://www.gnu.org/software/bash/manual/bashref.html#The-Set-Builtin

set [--abefhkmnptuvxBCEHPT] [-o option-name] [argument …]
set [+abefhkmnptuvxBCEHPT] [+o option-name] [argument …]

...

--이 옵션 뒤에 인수가 없으면 위치 인수가 설정 해제됩니다. 그렇지 않으면 위치 매개변수 중 일부가 "-"로 시작하더라도 위치 매개변수가 매개변수로 설정됩니다.

-옵션의 끝을 알리고 나머지 모든 인수가 위치 인수에 할당되도록 합니다. -x 및 -v 옵션은 꺼집니다. 매개변수가 없으면 위치 매개변수는 변경되지 않고 그대로 유지됩니다.

"-" 대신 "+"를 사용하면 이러한 옵션이 꺼집니다. 이러한 옵션은 셸을 호출할 때도 사용할 수 있습니다. 현재 옵션 세트는 $-에서 찾을 수 있습니다.

나머지 N개 매개변수는 위치 매개변수로 $1, $2, ... $N에 순서대로 할당됩니다. 특수 매개변수 #는 N으로 설정됩니다.

위치 매개변수를 설정하는 방법에는 세 가지가 있는 것 같습니다.

set -- argument
set - argument
set argument

그들 사이의 차이점은 무엇입니까?

감사해요.

답변1

--및 의 차이점은 사용 시 및 옵션도 설정되지 않는다는 -점입니다 .--x-v

$ set -vx
$ echo "$-"
himvxBHs                # The options -v and -x are set.

$ set - a b c
$ echo "$-  <>  $@"     # The -x and -v options are turned off.
himBHs  <>  a b c

이는 쉘이 이를 허용하는 일반적인 방법이지만 -POSIX에서는 이 옵션이 "지정되지 않음"입니다.

첫 번째 인수가 "-"이면 결과가 지정되지 않습니다.

set --일반과 일반의 차이는 set매우 일반적으로 사용됩니다.
설명서에서는 이를 매우 명확하게 설명합니다.

-- 이 옵션 뒤에 인수가 없으면 위치 인수가 설정되지 않습니다. 그렇지 않으면 위치 인수 중 일부가 -로 시작하더라도 위치 인수가 args로 설정됩니다.

--는 "옵션의 끝"을 의미하며, 다음 매개변수는 -로 시작하더라도 위치 매개변수로 사용됩니다.

$ set -- -a -b -e -f arg1
$ echo "$@"
-a -b -e -f arg1

대신에:

$ set -a -b -e -f arg1
$ echo "$@"
arg1

그러나 일부 셸 옵션도 변경되었습니다.

- 또는 --를 사용하지 않으면 옵션 이름으로 확장되는 변수를 사용하여 옵션을 설정할 수 있습니다(인용되더라도).

$ echo "$-"
himBHs

$ a='-f'
$ set "$a"

$ echo "$-"
fhimBHs

답변2

set argument와 사이의 차이점은 set -- argument다른 많은 명령에 공통적입니다.

때때로 로 시작하는 인수가 있지만 명령이 실제로는 명령 옵션이라고 -생각하기 때문에( 로 시작하기 때문에) 이를 실제로 사용할 수 없습니다 .-

실제로 는 --다음과 같습니다. "충분합니다! 시작하더라도 뒤에 나오는 모든 내용은 -실제 인수입니다."

일반적으로 (맨 페이지에 따르면) lone은 이 목적 -과 동일합니다 --.

다음을 사용할 수 있습니다.

set -- -a -b file1 file2  

$1, $2, $3및 를 각각 , 및 $4로 설정합니다 . 저장 되지 않음 - 이것이 없으면 단지 표시일 뿐이며 명령 자체에 대해 가능한 옵션 으로 해석됩니다 .-a-bfile1file2---a-bset

관련 정보