내 교과서에서 두 개의 Unix 스크립트를 발견했습니다. 하나 a=$b
(max=$a 형식)와 다른 하나 a=b
(number=num 형식) 로 구현합니다 .
이것들은 같은 것입니까, 아니면 차이점이 있습니까?
답변1
$ a=b
$ printf $a
b
$ b=hello
$ a=$b
$ printf $b
hello
기본적으로 값이 리터럴인 a=b
변수를 만듭니다 . 명명된 변수가 명명된 기존 변수와 동일한 값을 갖도록 만듭니다 .a
b
a=$b
a
b
답변2
이 경우 a=$b
변수 값을 b
에 할당합니다 a
. 리터럴 문자열 " " 의 값을 a=b
할당하는 경우a
b
예를 들어 와 동일한 값을 b=10
할당한다고 가정해 보겠습니다 . 다음 중 하나를 수행할 수 있습니다.a
b
a=$b
또는,
a=10
답변3
bash
도움 요청을 이용하여 이러한 질문에 답할 수도 있습니다 set -x
. 이 플래그는 bash에게 명령을 실행하기 전에 명령과 확장 인수를 표시하도록 지시합니다.
먼저 몇 가지 설정은 다음과 같습니다.
$ a=some-value
$ b=some-other-value
$ set -x
이제 쉘이 이러한 명령을 어떻게 해석하는지 살펴보겠습니다.
$ a=b
+ a=b
변수의 값은 a
리터럴 문자열 "b"로 설정됩니다.
이제 시도해 보겠습니다 $b
.
$ a=$b
+ a=some-other-value
여기서 우리는 쉘에게 말합니다.평가하다 $b
b
명령에 값을 삽입합니다 .
이는 셸의 일부 값을 보여줍니다. 개별 명령이 작업을 수행하도록 하는 대신 변수와 와일드카드를 해석합니다. 예를 들어, 쉘은 시작하기 전에 작업을 수행하므로 ls
"*.txt"를 해석하는 방법을 알 필요가 없습니다 .ls
$ ls *.txt
+ ls a.txt b.txt c.txt
a.txt b.txt c.txt