我正在创建一个脚本,当我尝试捕获命令返回时,如果我在终端上使用此命令,则会出现未找到命令的错误:
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