~에서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
-b
file1
file2
--
-a
-b
set