"a=b"와 "a=$b" 사이에 차이가 있나요?

"a=b"와 "a=$b" 사이에 차이가 있나요?

내 교과서에서 두 개의 Unix 스크립트를 발견했습니다. 하나 a=$b(max=$a 형식)와 다른 하나 a=b(number=num 형식) 로 구현합니다 .

이것들은 같은 것입니까, 아니면 차이점이 있습니까?

답변1

$ a=b
$ printf $a
b
$ b=hello
$ a=$b  
$ printf $b
hello

기본적으로 값이 리터럴인 a=b변수를 만듭니다 . 명명된 변수가 명명된 기존 변수와 동일한 값을 갖도록 만듭니다 .aba=$bab

답변2

이 경우 a=$b변수 값을 b에 할당합니다 a. 리터럴 문자열 " " 의 값을 a=b할당하는 경우ab

예를 들어 와 동일한 값을 b=10할당한다고 가정해 보겠습니다 . 다음 중 하나를 수행할 수 있습니다.ab

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

여기서 우리는 쉘에게 말합니다.평가하다 $bb명령에 값을 삽입합니다 .

이는 셸의 일부 값을 보여줍니다. 개별 명령이 작업을 수행하도록 하는 대신 변수와 와일드카드를 해석합니다. 예를 들어, 쉘은 시작하기 전에 작업을 수행하므로 ls"*.txt"를 해석하는 방법을 알 필요가 없습니다 .ls

$ ls *.txt
+ ls a.txt b.txt c.txt
a.txt  b.txt  c.txt

관련 정보