将输出分配给shell脚本中的变量

将输出分配给shell脚本中的变量,shell,sh,Shell,Sh,我不熟悉shell脚本,我试图将此行的输出分配给一个变量,但所有的努力都是徒劳的 var2=$(cat "filename") var1=$(echo " $var2 +3 " | bc ) var2正确地从文件中读取,并且输出显示总和的值,但该值未分配给var1 ps:Filename包含一个数字条目缺少括号 var2=$(cat "file") var3=$(( var2 + 3 )) echo $var3 您也可以尝试使用expr 像这样的 var2=$(cat "filename")

我不熟悉shell脚本,我试图将此行的输出分配给一个变量,但所有的努力都是徒劳的

var2=$(cat "filename")
var1=$(echo " $var2 +3 " | bc )
var2正确地从文件中读取,并且输出显示总和的值,但该值未分配给var1


ps:Filename包含一个数字条目

缺少括号

var2=$(cat "file")
var3=$(( var2 + 3 ))
echo $var3
您也可以尝试使用expr 像这样的

var2=$(cat "filename")
var3=`expr $var2 + 3`
echo $var3
这是一个好主意

当我尝试此操作时,代码工作正常

var3="$("echo " $var2 +3 " |bc)"

您是否在未分配的情况下检查了结果?请编辑您的Q以包括文件名和预期输出中的内容。更重要的是,shell有现代的cmd替换(即
$(..)
),然后它也有算术替换,即
var2=$($a+$b/$c))
和带有
if($a>5))的简单算术求值;然后…
一般来说,您不需要
bc
。(是的,有些情况下你可能会这样做)。(在这些算术测试中,您甚至不需要前导的
$
字符(除非像$1)。我没有投反对票。祝你好运当您直接运行该代码片段(并且仅运行该代码)时,您会看到从
bc
直接显示到终端的输出,并且
var1
为空?因为这听起来不对。
var1=$(echo“$var2+3”| bc);echo$var1
有一个输出,看起来是这样的
4.223
当我试图输出@etanReisner值时,只有一个空格,如果您将
set-x
添加到顶部并在末尾添加
declare-p var2 var1
,会怎么样?完整的输出是什么样子的?OP的代码应该可以正常工作。使用shells算术扩展(即,
$(…)
)替换
bc
的子shell、管道和调用是一个好主意,但在“修复”问题方面并不是一个实质性的区别。如果
var2
(从OP的评论来看)有一个浮点值,这实际上是一个坏主意。真的吗?这应该会中断,因为您正在尝试运行名为
echo
的命令,而不是
echo