如何将 echo 的结果分配给 bash 脚本中的变量

Rem*_*mco 12 linux bash

我是 Linux 新手,复制了一个从 XML 中提取值的 bash 脚本。我可以完美地回应计算结果,但将其分配给变量似乎不起作用。

#!/bin/bash
IFS=$'\r\n' result=(`curl -s "http://xxx.xxx.xxx.xxx/smartmeter/modules" | \
xmlstarlet sel -I -t -m "/modules/module" \
    -v "cumulative_logs/cumulative_log/period/measurement" -n \
    -v "point_logs/point_log/period/measurement" -n | \
sed '/^$/d' `)

# uncomment for debug
echo "${result[0]}"*1000 |bc 
gas=$(echo"${result[0]}"*1000 |bc)

echo "${result[0]}"*1000 |bc
Run Code Online (Sandbox Code Playgroud)

给了我我需要的结果,但我不知道如何将它分配给一个变量。

我尝试使用刻度线:

gas=\`echo"${result[0]}"*1000 |bc\`
Run Code Online (Sandbox Code Playgroud)

$(

有人可以指出我正确的方向吗?

Ija*_*han 14

如果您bc无论如何都想使用,那么您可以只使用 back ticks ,为什么要使用反斜杠?这段代码有效,我刚刚测试过。

  gas=`echo ${result[0]}*1000 | bc`
Run Code Online (Sandbox Code Playgroud)

echo在 * 运算符之后使用一个空格并且周围没有空格

  • `$( ...)` 和反引号都是命令替换的形式。反引号仅适用于没有“$(..cmd..)”的系统。加入 20 世纪 90 年代,开始使用“新”形式的命令替换!;-) 祝你们好运。 (3认同)
  • 不客气,您可以在 backtiks 中执行任何类似的命令并将结果分配给变量 (2认同)

fed*_*qui 6

没有必要使用bcnor echo。只需将算术扩展$(( expression ))用于此类操作:

gas=$(( ${result[0]} * 1000))
Run Code Online (Sandbox Code Playgroud)

允许计算算术表达式并替换结果