首页 > 解决方案 > 命令替换不适用于 Bash 中的“test”或“[”或“[[”

问题描述

我一直在尝试使用命令替换将测试命令的结果(0 或 1)分配给变量,但它似乎不起作用。是否有一个原因?

假设我的工作目录中有一个文件 random_file.txt ,我测试它是否存在

test -a random_file.txt
echo $?

输出为 0,这是预期的。

然后我尝试使用命令替换将结果分配给变量 test_result,

test_result=$(test -a random_file.txt)
echo $test_result

输出为空。

同样,当我尝试使用 [[ 或 [,它也不会像我预期的那样工作。

标签: bashshellsh

解决方案


test不向标准输出写入任何内容,这是命令替换捕获的内容。相反,它设置$?.

test -a random_file.txt
test_result=$?

使用[( 的另一个名称test) or[[是相同的:

[ -a random_file.txt ]
test_result=$?

[[ -a random_file.txt ]]
test_result=$?

推荐阅读