bash - 如何理解 Bash 中被双引号包围的命令替换中的引号?
问题描述
$ a=33
$ echo "$(echo '$a')" # (1)
$a
$ echo "$(echo "$a")" # (2)
33
看不懂上面的shell命令行解析结果。
对于命令行(1),根据man bash
,双引号内的单引号将被解析为文字,而$a
双引号内将被插值,所以我认为命令行(1)的结果应该是'33'
。
解决方案
双引号中没有单引号。$(....)
是命令替换。本质上,其中发生的事情发生(...)
在其自己的子外壳中。您必须在该子外壳中使用引用规则。子shell 代表它自己的环境。
例如:
$ a=33
$ echo $(echo "'$a'") # single-quotes within double-quotes
命令替换中的引用规则被正确应用,导致输出:
$ '33'
如果您还有其他问题,请告诉我。
推荐阅读
- linux - BPF 验证器拒绝代码:“无效的 bpf_context 访问”
- java - 如何在优先级队列中使用对,然后使用键作为优先级返回值
- thunderbird - 如何使用雷鸟命令行添加多个附件?
- django - 我一次又一次地重定向到同一个登录页面,它甚至没有验证凭据
- machine-learning - 文本分类和特征选择有什么区别
- r - map 和 lapply 调用存储在字符串中的函数
- python - Pandas - 希望将基于 int 的窗口转换为基于时间的窗口
- javascript - 我应该如何将 jsons 附加到 javascript 中的变量/另一个 json
- java - 如何在java中使用Split方法
- html - 在其他平台上分享 URL 时图片不显示