如果我尝试以下:
varReturn=$(ls)
echo $varReturn
它显示了目录中列出的元素的正确输出。
但如果我试试这个:
varReturn=$(/opt/vc/bin/tvservice -n)
echo $varReturn
它没有显示预期的输出:/
我的目标是检查HDMI端口是否已连接。 它对我很好奇,为什么它只适用于某些命令。
我期待在这里得到一些帮助。我没弄明白,问题是什么。
编辑:
现在我找到了另一种方法并尝试了以下方法:
varReturn=`tvservice -s`
echo $varReturn
这显示了正确的输出:
但如果我使用另一个命令,就像这个:
varReturn=`tvservice -n`
echo $varReturn
它显示我没有echo的输出,但显示var的输出(令人困惑)。
如果我使用以下代码,它仍会显示输出:
varReturn=`tvservice -n`
#echo $varReturn
显示的输出没有空格。
答案 0 :(得分:1)
当你执行像varReturn=$(/opt/vc/bin/tvservice -n)
这样的shell命令时,它只会在命令执行成功时将输出存储到变量中,否则它将不会保存任何信息,因为错误/不成功的消息将被重定向到标准错误。因此,您必须将其重定向到标准输出,如下所示: -
varReturn=$(/opt/vc/bin/tvservice -n 2>&1)
现在,在成功和不成功的执行情况下,输出将存储在变量varReturn
中。
答案 1 :(得分:1)
此代码至少存在一个问题:
varReturn=$(/opt/vc/bin/tvservice -n)
echo $varReturn
# ^ missing double quotes around this variable
添加这些引号将确保将变量作为单个参数传递给echo
。否则,echo
会看到一个参数列表并输出每个参数,并以空格分隔。
下一个可能的问题是命令输出到标准错误而不是标准输出,因此它不会被$()
或老式的等效` `
捕获。要解决此问题,请尝试:
output=$(/opt/vc/bin/tvservice -n 2>&1)
# ^ redirect standard error to standard output
echo "$output"