命令在命令行中工作,但在 shell 脚本中不起作用

命令在命令行中工作,但在 shell 脚本中不起作用

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

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

相关内容