bash - 为什么 bash 不在 $() 运算符中拆分字段?
问题描述
只是为了学习,当我尝试一堆东西时,我注意到一种bash
我无法从逻辑上解释的行为。
$ ls $(echo a)
ls: cannot access 'a': No such file or directory
$ ls $($'\145\143\150\157\40\141')
echo a: command not found
$ ls $($"\145\143\150\157\40\141")
\145\143\150\157\40\141: command not found
在第一种情况下,echo a
被评估a
成为 的参数ls
。很公平。但是,在第二种情况下,八进制编码的字符串正在echo a
按预期进行评估;但是整个字符串被$()
. 此外,在第三种情况下,双引号不会发生扩展。为什么字段不拆分?我想这与. bash
但是,我未能解释确切的问题是什么。有什么办法可以使字段拆分工作,以便像第一种情况一样对待它?
解决方案
形式的单词$'string'
被扩展为单引号字符串,就好像美元符号不存在一样。这意味着,
$($'\145\143\150\157\40\141')
是相同的
$('echo a')
并且单引号字符串不会进行分词或任何其他类型的扩展。请参阅Bash 参考手册§ ANSI-C 引用。
有什么办法可以使字段拆分工作,以便像第一种情况一样对待它?
$ ls $(eval $'\145\143\150\157\40\141')
ls: cannot access 'a': No such file or directory
但这是不可取的,请参阅BashFAQ#048。
关于$"string"
语法,请参阅Bash Reference Manual § Locale-Specific Translation,这完全是另一回事。
推荐阅读
- python - 将“if”语句组合成一个比较运算符链
- python - 使用 pipenv install 从 pipfile 安装会出现错误
- python - 有没有办法创建一个逐渐减小增量大小的计数器?
- jquery - 根据作为 AJAX 响应接收的数组更改背景颜色
- c++ - SDL2_ttf 亚像素抗锯齿
- angular - Angular 2. 进行服务调用以等待 API 返回数据
- node.js - “未知”类型的参数不能分配给“字符串”类型的参数。在尝试在打字稿中实现 json 解析时
- android - Android 中 FrameLayout 中子视图的最大数量是多少?
- java - 没有任何东西可以保存到firebase
- angular - 如何清除 ng-select 选择