使用变量回送一行程序bash脚本

使用变量回送一行程序bash脚本,bash,echo,Bash,Echo,我想这样做: i="1"; echo -e '#!/usr/bin/env bash\nmyprogram -i "input_${i}.txt"' 并将其传送到作业调度程序 但是,这不会用变量i的值替换变量i。相反,我得到的是: #!/usr/bin/env bash myprogram -i "input_${i}.txt" 我玩了一点echo的选项-e和单/双引号,但无法使其工作。例如,我得到了这个: i="1"; echo -e "#!/usr/bin/env bash\nmypro

我想这样做:

i="1"; echo -e '#!/usr/bin/env bash\nmyprogram -i "input_${i}.txt"'
并将其传送到作业调度程序

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

#!/usr/bin/env bash
myprogram -i "input_${i}.txt"
我玩了一点echo的选项-e和单/双引号,但无法使其工作。例如,我得到了这个:

i="1"; echo -e "#!/usr/bin/env bash\nmyprogram -i \"input_${i}.txt\""
-bash: !/usr/bin/env: event not found
我的bash版本是4.1.2。

试试这个:

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

您可以同时回显单引号和双引号字符串。

也可以尝试转义感叹号:

\应该可以,并且不会被bash作为“事件”读取

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

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