Bash Shell:for 循环返回不同的值



$values包含一个字符串,我从配置文件中获取了该字符串。此字符串可以是 eiter: ?, !或者只是一个包含单词的字符串,如"foo bar"。

values="?"
for value in ${values}
do
    echo "value is ${value}"
done

如果我在本地主机上执行脚本,结果是:

value is ?

但是,如果我从远程主机执行脚本(使用 ssh 和 sudo su - someuser "/tmp/foo.sh"),结果是:

value is 2

直到现在,我都无法找出有什么不同。有人可以帮忙吗?

你需要引用变量,否则 bash 会尝试在 for-header 中扩展$values。

values="?"
for value in "${values}"
do
    echo "value is ${value}"
done

?本身 in bash 尝试扩展到当前目录中的任何单个字符文件名。

例如
$ mkdir somedir
$ cd somedir
$ echo ?
?
$ mkdir a
$ echo ?
a 
$ touch {b..z}
$ echo ? 
a b c d e f g h i j k l m n o p q r s t u v w x y z

因此,这取决于您在每个系统上拥有的内容,猜测您在远程主机上有一个文件2

最新更新