왜 (` `)는 목록을 제공하고 $()는 하나의 인수만 제공합니까?

왜 (` `)는 목록을 제공하고 $()는 하나의 인수만 제공합니까?

제가 잘못된 단어를 사용했을 수도 있으니 수정 부탁드립니다. 내가 가지고 있다고 가정 해 봅시다 :

lst=(`ls $1`)
echo $lst #this gives the first element of the list

하지만 내가 이것을 시도하면 :

lst=$(ls $1)
echo $lst #this gives me all the files under argument directory

답변1

첫째, $1(첫 번째 매개변수)가 왜 여기에 있나요? 둘째, 변수의 내용이 아닌 echo lst로만 작성하세요 . lst당신은 그것을 원해야합니다 echo $lst.

괄호로 묶은 할당은 다음 을 사용할 때 bash(1)첫 번째 요소로 평가되는 인덱스 없이 배열을 생성합니다 .

lst=(1 2 3)
echo $lst       # prints 1
echo ${lst[0]}  # prints 1
echo ${lst[1]}  # prints 2
echo ${lst[*]}  # prints 1 2 3

답변2

첫 번째 예

lst=(`ls $1`)

동일할 것이다

lst=( $(ls $1 ) )

그리고 둘 다 bash에서 작동하는 것 같습니다.

답변3

배쉬에서.

첫 번째 예제 lst=(ls $1은 )var lst에 값 배열을 생성합니다.
이 코드는 다음과 같이 표시됩니다.

lst=(`ls .`); printf '%s\n' "${lst[@]}"

두 번째 예제는 lst=$(ls $1)실행되지만 ls $1출력(하나의 긴 문자열로 연결됨)만 var 에 할당합니다 lst.

아마도 당신이 비교하고 싶은 것은 다음과 같습니다:

lst=( `ls $1`)
lst=($(ls $1))

그리고 실제로 `...`는 똑같습니다 $(...).

두 명령 모두 값 배열을 생성합니다.lst

관련 정보