저는 방금 유닉스를 배우기 시작했고 명령줄 매개변수에 대한 매우 기본적인 질문이 있습니다.
내 스크립트에서 다음을 수행한다고 가정해 보겠습니다.
echo $@ #Now this prints all the command line arguments
args=$@ #Args array will take the command line argument array from $@
echo $args
여기서 마지막 진술에 문제가 있습니다. echo arrayname
첫 번째 인덱스 요소만 인쇄해야 하는데 왜 전체 배열을 표시합니까?
유닉스에서 일반 배열을 취하고 배열 이름이 ARR이라고 말하면 이제 echo ARR을 사용하면 모든 요소 대신 첫 번째 요소가 표시됩니다. 그렇다면 동작이 위의 args와 다른 이유는 무엇입니까?
답변1
$@
$@
"통합 인덱스"가 있기 때문에 인덱스가 없는 일반 배열 변수와 다르게 동작합니다. 이는 항상 "모든 요소"를 의미합니다.
set -- a b c
echo $@
a b c
set -x
var=$@
+ var='a b c'
ar=(a b c)
+ ar=(a b c)
echo $ar
+ echo a
a
답변2
배열 대신 변수를 설정했기 때문에 모든 요소가 인쇄됩니다. 어레이를 설정하려면 다음을 수행해야 합니다.
args=($@)