#!/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文档中的find命令输出?
答案 0 :(得分: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
。您也可以在$
之前转义$(...)
,以防止前sudo
shell执行命令。
答案 1 :(得分:0)
流程替代&amp;变量扩展发生在heredocs处理之前。
尝试逃避$ signs&amp; glob(*)。