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