$(RANDOM)이 $(ls -la)와 다르게 작동하는 이유는 무엇입니까?

$(RANDOM)이 $(ls -la)와 다르게 작동하는 이유는 무엇입니까?

Bash에서 명령 대체를 위해 다음을 수행합니다.

hello=$(ls -la)  
echo "$hello"

하지만 아래 명령으로 동일한 작업을 수행하면 실패하고 난수를 찾을 수 없다는 메시지가 나타납니다.

hell=$(RANDOM)
echo "$hell"

산술 확장을 사용하면 이를 극복할 수 있습니다.

hell=$((RANDOM))
echo "$hell"

아래가 작동하지 않는 이유는 무엇입니까? 제가 이해한 바에 따르면 무작위도 명령이므로 숫자 에코를 받아야 합니다.

hell=$(RANDOM)
echo "$hell"

답변1

RANDOM명령이 아니라 변수입니다. 오직한 세트는 조개껍데기로 구성되어 있는데 뭔가 특별한 것이 있어요:

RANDOM 이 매개변수 (*) 가 참조될 때마다 0에서 32767 사이의 임의의 정수로 확장됩니다. 이 변수에 값을 할당하면 난수 생성기가 시드됩니다. RANDOM이 설정되지 않으면 나중에 재설정되더라도 특수 속성이 손실됩니다.

echo "$RANDOM"보다 "일반적인" 변수와 같은 변수를 사용하는 방법 HOME과 같습니다 BASH_VERSION. 물론 ${RANDOM}, 일반 괄호 대신 중괄호를 사용하는 것도 가능합니다.

없이 산술 확장에 사용할 $수 있음산술 문맥, 모든 변수에서 작동합니다.

표현식 내에서 쉘 변수는 매개변수 확장 구문을 사용하지 않고도 이름으로 참조될 수도 있습니다.

(예: x=4; echo "$((x*x))"인쇄물 16)

(*여기서 변수와 매개변수의 차이는 무시해도 됩니다.)

관련 정보