在 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
。我的系统上肯定有 sort
; command -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
)
我想 运行 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
的标准输入,请使用此处的字符串:
var=$(LC_COLLATE=C sort <<< 'aaa
Abc')
或此处文档:
var=$(LC_COLLATE=C sort << EOF
aaa
Abc
EOF
)