gpt4 book ai didi

命令替换中的 bash 变量替换

转载 作者:行者123 更新时间:2023-11-29 09:01:02 24 4
gpt4 key购买 nike

我想做如下的事情:

#!/bin/bash

cmd="find . -name '*.sh'"
echo $($cmd)

我期望的是它会显示当前目录中的所有 shell 脚本文件,但什么也没有发生。

我知道我可以根据这个post用eval解决问题

#!/bin/bash

cmd="find . -name '*.sh'"
eval $cmd

所以我的问题是为什么命令替换在这里不起作用,$(...) 和 eval 在这个问题上有什么区别?

最佳答案

命令替换在这里起作用。只是你有错误的引用。你的脚本只找到一个文件名!这个里面有单引号和星号:

'*.sh'

你可以通过这个命令创建这样一个不寻常的文件并测试它:

touch "'*.sh'"

bash 中的引用不同于其他编程语言。查看此 answer 中的详细信息.

你需要的是这个引用:

cmd="find . -name *.sh"
echo $($cmd)

关于命令替换中的 bash 变量替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13290186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com