2

我想这样做:

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。

4

3 回答 3

8

尝试这个:

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

您可以echo同时对字符串进行单引号和双引号。

于 2013-05-29T22:49:03.720 回答
0

也尝试转义感叹号:

\!应该没问题,并且不会被 bash 解读为“事件”。

于 2013-05-29T23:21:00.170 回答
0
i="1"; echo -e '#!/usr/bin/env bash\nmyprogram -i "input_'"${i}"'.txt"'

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

于 2013-05-30T00:29:22.507 回答