2
#!/bin/bash

sudo -u rei_sh -H -s <<-EOM

echo "hi"

for i in $(find -name *.properties)

do

echo "ivalue is \$i"

done

exit

EOM

我正在使用上面的代码。

当我运行代码时,只会打印“hi”。

但是如果我使用“for i in one two”,则会打印以下内容

ivalue is one
ivalue is two.

为什么我不能在 here 文档中循环查找命令的输出?

4

2 回答 2

3

因为在开始$(...)之前运行sudo...你需要引用EOM

sudo -u rei_sh -H -s <<-'EOM'
    echo "hi"
    for i in $(find -name *.properties)
    do
        echo "ivalue is $i"
    done
EOM

exit是多余的。使用 引号EOM,您也不需要$echo命令中转义 。您也可以转义$before$(...)以防止 pre- sudoshell 执行命令。

于 2013-03-08T07:29:51.607 回答
0

进程替换和变量扩展发生在处理 heredocs 之前。

尝试转义 $ 符号和 glob (*)。

于 2013-03-08T10:33:48.487 回答