用变量回显单行bash脚本

时间:2013-05-29 22:45:58

标签: bash echo

我想这样做:

i="1"; echo -e '#!/usr/bin/env bash\nmyprogram -i "input_${i}.txt"'

并将其传递给作业调度程序。

但是,这并不是用变量i替换它的值。相反,我得到了这个:

#!/usr/bin/env bash
myprogram -i "input_${i}.txt"

我玩了一些选项-e echo和单引号/双引号但是无法使它工作。例如,我明白了:

i="1"; echo -e "#!/usr/bin/env bash\nmyprogram -i \"input_${i}.txt\""
-bash: !/usr/bin/env: event not found

我的bash版本是4.1.2。

3 个答案:

答案 0 :(得分:4)

试试这个:

i="1"; echo -e '#!/usr/bin/env bash\nmyprogram -i '"\"input_${i}.txt\""

您可以同时echo单引号和双引号。

答案 1 :(得分:0)

尝试转义感叹号:

\!应该没问题,不会被bash读作“事件”。

答案 2 :(得分:0)

i="1"; echo -e '#!/usr/bin/env bash\nmyprogram -i "input_'"${i}"'.txt"'

基本上,使用单引号,直到需要插值,然后关闭单引号,打开双引号,添加插值,关闭双引号,重新打开单引号,并完成字符串。在shell中,引号不分隔单词;他们只是改变了对他们之间的一个词的部分的解释。