명령은 명령줄에서 작동하지만 쉘 스크립트에서는 작동하지 않습니다.

명령은 명령줄에서 작동하지만 쉘 스크립트에서는 작동하지 않습니다.

스크립트를 작성 중이고 명령 반환을 캡처하려고 할 때 터미널에서 이 명령을 사용하면 명령을 찾을 수 없음 오류가 발생합니다.

gcloud -q compute snapshots list --format='csv(NAME)'

좋은 결과.

스크립트는 다음과 같습니다

#!/bin/sh
CSV_SNAPSHOTS= $(gcloud -q compute snapshots list --format='csv(NAME)')
IFS=$'\n'

for i in $CSV_SNAPSHOTS
do
    echo "$i"
done

답변1

변수 선언 뒤(및 앞)에는 =공백이 있어서는 안 됩니다 .=

그래서 이렇게 해야 합니다:

CSV_SNAPSHOTS=$(gcloud -q compute snapshots list --format='csv(NAME)')

또한 (거의 항상) 변수와 명령 대체를 인용해야 한다는 점에 유의하십시오. 단, 이 경우 명령 대체를 변수에 저장하기 때문에 인용을 피할 수도 있습니다.


예:

$ foo="$(echo spam)"
$ echo "$foo"
spam

$ bar= "$(echo egg)"
No command 'egg' found, did you mean:

답변2

오류는 후행 공백이지만 =출력을 변수에 저장하지 않고 루프에서 직접 읽을 수도 있습니다.

IFS=$'\n'

gcloud -q compute snapshots list --format='csv(NAME)' |
while read -r i; do
    printf "%s\n" "$i"
done

관련 정보