Linux 命令替换、bash和管道出错

Linux 命令替换、bash和管道出错,linux,bash,command,substitution,Linux,Bash,Command,Substitution,使用CentOS 6.4 执行: var1=$(softnas-cmd checkupdate | jq .success) 给我一个错误: "parse error: Invalid numeric literal at line 1, column 9" 如果我执行var1=$(softnas cmd checkupdate),然后执行echo$var1我会得到: {"success" : true, "session_id" : 1935, "result" : {"success":

使用CentOS 6.4

执行:

var1=$(softnas-cmd checkupdate | jq .success)
给我一个错误:

"parse error: Invalid numeric literal at line 1, column 9"
如果我执行
var1=$(softnas cmd checkupdate)
,然后执行
echo$var1
我会得到:

{"success" : true, "session_id" : 1935, "result" : {"success":true,"msg":"You are running the latest version","records":{"version":"2.1.3.el6.x86_64","newversion":"2.1.3.el6.x86_64","updateavailable":false,"msg":"You are running the latest version"},"total":4}}
如果我随后执行
var2=$(echo$var1 | jq.success)
这会起作用,我会得到预期的结果: 真的

最终,我想这样做:

if [ $(softnas-cmd checkupdate | jq .succcess) = "true" ]; then
   echo "update required"
   ...
fi;
有人能告诉我如何格式化命令替换,以便我可以一次性执行吗


谢谢

您是否正在尝试解析字符串“updatevailable”后的true/false?如果是,请尝试以下方法:

res=`softnas-cmd checkupdate | sed -n "s/.*updateavailable\":\([tf][a-z]*\),.*/\1/p"`; 
if [ "$res" == "true" ]; then 
    echo "update required" ... 
fi;
但是,如果您试图在第一个“success”字符串之后解析true/false,则:

res=`softnas-cmd checkupdate | sed -n "s/.*\"success\" : \([tf][a-z]*\), .*/\1/p"`; 
if [ "$res" == "true" ]; then 
    echo "update required" ... 
fi;
解析第二个“success”字符串将是:

res=`softnas-cmd checkupdate | sed -n "s/.*\"success\":\([tf][a-z]*\), .*/\1/p"`; 
if [ "$res" == "true" ]; then 
    echo "update required" ... 
fi;

var1=$(softnas cmd checkupdate)
后跟
echo“$var1”
(注意双引号!)打印什么?[ec2]-user@ip-10-0-10-145~]$var1=$(softnas cmd checkupdate)[ec2-user@ip-10-0-10-145~]$echo“var1$”var1$[ec2-user@ip-10-0-10-145~]$[ec2-user@ip-10-0-10-145 ~]$echo$var1{“成功”:正确,“会话id”:32270,“结果”:{“success”:true,“msg”:“您正在运行最新版本”,“记录”:{“version”:“2.1.3.el6.x86_64”,“newversion”:“2.1.3.el6.x86_64”,“updateavailable”:false,“msg”:“您正在运行最新版本”},“total”:4}[ec2]-user@ip-10-0-10-145 ~]$I尝试执行您的第一个建议,解析出'UpdateAvailable'值。当我尝试您的建议时,$res留下一个空值。但是,如果我分配res=
softnas cmd checkupdate
,然后res=
echo$res | sed…
,$res包含预期值,因此您的建议似乎遇到了我遇到的相同问题使用jq库输入如果字符串是您发布的字符串,它应该可以工作。我将其复制到一个文件中,并通过执行cat从那里对其进行测试。可能是您的脚本向stderr而不是stdout提供输出?如果是,请尝试softnas cmd checkupdate 2>&1|sed。。。。