在 bash 中的命令替换内部传递变量的问题

Issues passing variables inside of command substitution in bash

我想 运行 sort 并传递 LC_COLLATE=C 给它。然后输出将存储在一个变量中。

我写了这个:

var="$(LC_COLLATE=C sort 'aaa
Abc')"

但是,奇怪的是,我收到了 sort: No such file or directory。我的系统上肯定有 sortcommand -v sort 说它在 /usr/bin/ 中。我还尝试将 sort 更改为具体地说 /usr/bin/sort 但这也不起作用。

我知道命令替换有时会阻塞变量,但我认为这与从变量中取出变量有关,而不是相反。

编辑:这似乎也发生在命令替换之外。 运行:

LC_COLLATE=C sort 'aaa
Abc'

也给我同样的错误。我发现,如果我不使用多行引号,错误就会消失,但我无法解释原因。

sort 找不到的是名为 aaa<newline>Abc 的文件。如果要将字符串发送到 sort 的标准输入,请使用此处的字符串:

var=$(LC_COLLATE=C sort <<< 'aaa
Abc')

或此处文档:

var=$(LC_COLLATE=C sort << EOF
aaa
Abc
EOF
)