我想做类似以下的事情:
#!/bin/bash
cmd="find . -name '*.sh'"
echo $($cmd)
Run Code Online (Sandbox Code Playgroud)
我期望它会显示当前目录中的所有shell脚本文件,但什么也没发生.
我知道我可以根据这篇文章解决eval的问题
#!/bin/bash
cmd="find . -name '*.sh'"
eval $cmd
Run Code Online (Sandbox Code Playgroud)
所以我的问题是为什么命令替换在这里不起作用,$(...)和eval在问题方面的区别是什么?
命令替换在这里起作用。只是你引用错了。你的脚本只找到一个文件名!这里面有单引号和星号:
'*.sh'
Run Code Online (Sandbox Code Playgroud)
您可以通过此命令创建这样的不常见文件并测试它:
touch "'*.sh'"
Run Code Online (Sandbox Code Playgroud)
bash 中的引用与其他编程语言中的引用不同。查看此答案中的详细信息。
你需要的是这个引用:
cmd="find . -name *.sh"
echo $($cmd)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7254 次 |
| 最近记录: |