问题描述
我想运行sort
并将其传递给LC_COLLATE=C
。然后将输出存储在变量中。
我写了这个:
var="$(LC_COLLATE=C sort 'aaa
Abc')"
但是,奇怪的是,我收到了sort: No such file or directory
。我的系统上肯定有sort
; command -v sort
说它在/usr/bin/
中。我还尝试将sort
更改为专门说/usr/bin/sort
,但这也不起作用。
我知道命令替换有时会阻塞变量,但是我认为这与从变量中删除变量有关,而不是相反。
编辑:这似乎也发生在命令替换之外。正在运行:
LC_COLLATE=C sort 'aaa
Abc'
也给了我同样的错误。我发现,如果我不使用多行引号,该错误就会消失,但我无法解释原因。
解决方法
sort
找不到的文件名为aaa<newline>Abc
。如果要将字符串发送到sort
的标准输入,请使用here字符串:
var=$(LC_COLLATE=C sort <<< 'aaa
Abc')
或此处文档:
var=$(LC_COLLATE=C sort << EOF
aaa
Abc
EOF
)