将命令的输出存储在变量中而不丢失 $? 值

将命令的输出存储在变量中而不丢失 $? 值

我正在开发一个 bash 脚本。我需要获取命令的输出并将其存储在变量中,并且我需要知道该命令是否成功。

我的意图是这样做(伪代码):

var = $(myCommand)

if($? = 0){
    doThings    
}else{
    doOtherThings
}

问题是$?保留执行结果var = $(),而不是myCommand

检查输出并myCommand不能证明执行成功。

答案1

问题是 $? 保留了执行 var = $() 的结果,而不是 myCommand。

你错了。$?保留的结果myCommand。一个简单的测试可以证明这一点,请参见此处:
在此处输入图片描述

答案2

假设您的命令是date +%d-%m-%Y,它会打印当前日期。

Usage : ./script.sh
cat script.sh

#!/bin/bash
command="date +%d-%m-%Y"
read var < <($command)
if [ $? -eq 0 ]; then
        echo "success"
else
        echo "fail"
        var="$command"
fi
echo $var

答案3

您需要一个变量来保存您的变量,$?在分配变量之前您需要输入这个变量,last_status=$(echo $?)之后您可以通过输入来调用 $?$last_status 而不是 $?

像那样;

echo $RANDOM

abc=$?

newVar=$(cat foo)

echo $abc

相关内容