在shell脚本中使用shell输出值

时间:2018-02-22 10:32:01

标签: shell sh

如果我尝试以下:

varReturn=$(ls)
echo $varReturn

它显示了目录中列出的元素的正确输出。

但如果我试试这个:

varReturn=$(/opt/vc/bin/tvservice -n)
echo $varReturn

它没有显示预期的输出:/

我的目标是检查HDMI端口是否已连接。 它对我很好奇,为什么它只适用于某些命令。

我期待在这里得到一些帮助。我没弄明白,问题是什么。

编辑:

现在我找到了另一种方法并尝试了以下方法:

varReturn=`tvservice -s`
echo $varReturn

这显示了正确的输出:

enter image description here

但如果我使用另一个命令,就像这个:

varReturn=`tvservice -n`
echo $varReturn

它显示我没有echo的输出,但显示var的输出(令人困惑)。 enter image description here

如果我使用以下代码,它仍会显示输出:

varReturn=`tvservice -n`
#echo $varReturn

显示的输出没有空格。

2 个答案:

答案 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"