已执行的:
cd ~ && mkdir mytmp && cd mytmp/
echo > somefile
并在bash脚本mytmp/myscript.sh中执行此操作。
#!/bin/bash
# version 1
cmd="find . -type f -printf %f\n"
$cmd
呈现想要的结果,即:
somefile
myscript.sh
注意,由于某些原因,我不需要用引号包围%f\n,就像在终端中编写命令时那样。这样做会产生不好的结果:
#!/bin/bash
# version 2
cmd="find . -type f -printf '%f\n'"
$cmd
在以下方面的成果:
'somefile
''myscript.sh
'
我需要执行 $cmd,同时打印它,就像我把它写在终端中一样。
将echo $cmd
添加到version 1
中可以正确地执行命令,但没有引用引用。
在echo $cmd
中添加version 2
会像我想要的那样用引号回显命令,但是执行命令的结果很糟糕。
我怎样才能做到这一点?
发布于 2017-05-23 23:53:17
其实我已经有了这个问题的答案,但是由于我“不小心”得到了我想要的东西,而且在搜索之后没有在网上找到答案,所以我想我还是把它发到这里吧。
解决方案是将引号包括在version 2
中,并在执行命令时使用eval消除它们。
#!/bin/bash
cmd="find . -type f -printf '%f\n'"
eval $cmd
echo $cmd
https://stackoverflow.com/questions/44152200
复制