为什么不是';t bash在$()运算符内拆分字段?
只是为了学习,当我尝试一些东西时,我注意到一种我无法从逻辑上解释的为什么不是';t bash在$()运算符内拆分字段?,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 在第一种
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
的参数。很公平。然而,在第二种情况下,八进制编码字符串被评估为回波a
,与预期一致;但是整个字符串被$()
视为命令。此外,在第三种情况下,没有使用双引号进行扩展。为什么田地不分开?我想这与bash中的bash
有关。但是,我没有解释到底是什么问题。有什么方法可以使字段拆分工作,使其像第一种情况一样处理吗?一个$'string'
形式的单词被扩展为一个带引号的字符串,就好像美元符号不存在一样。也就是说
$($'\145\143\150\157\40\141')
与
$('echo a')
单引号字符串不进行分词或任何其他类型的扩展。看
有没有什么方法可以让字段拆分工作正常进行,以便像第一个案例一样处理
但这是不可取的,请参见
关于
$“string”
语法,请看,这完全是另一回事。一个形式为$“string”
的单词被扩展为一个带引号的字符串,就好像美元符号不存在一样。也就是说
$($'\145\143\150\157\40\141')
与
$('echo a')
单引号字符串不进行分词或任何其他类型的扩展。看
有没有什么方法可以让字段拆分工作正常进行,以便像第一个案例一样处理
但这是不可取的,请参见
关于
$“string”
语法,请看,这完全是另一回事