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

上記のコードを使用しています。

コードを実行すると、「こんにちは」のみが出力されます。

しかし、「for i in one two」を使用すると、次のように出力されます

ivalue is one
ivalue is two.

ヒア ドキュメント内で find コマンドの出力をループできないのはなぜですか?

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をエスケープする必要もありません。または、pre- shellがコマンドを実行しないように、 beforeをエスケープすることもできます。$echo$$(...)sudo

于 2013-03-08T07:29:51.607 に答える
0

プロセス置換と変数展開は、ヒアドキュメントが処理される前に発生します。

$ 記号とグロブ (*) をエスケープしてみてください。

于 2013-03-08T10:33:48.487 に答える