bash 变量作为字符串传递给外部程序 (bc)?

bash variable being passed to external program (bc) as string?

我有一个 shell 脚本,其中包含以下内容:

    filesize=22
    incommon=25
    num=$(bc <<< 'scale=2; ($incommon / $filesize) * 100')

输出:

(standard_in) 1:非法字符:$

(standard_in) 1:非法字符:$

例如,如果我将 ($incommon / $filesize) 替换为 (22 / 55),它就可以正常工作。 在这种情况下,如何将我的变量传递给 bc?

您可以改为使用以下命令:

num=$(echo "scale=2; ($incommon/$filesize) * 100" | bc )

正如 Charles 所建议的,这可以通过从 ' 切换到 " 引号来完成。

num=$(bc <<< "scale=2; ($incommon / $filesize) * 100")

bash 将单引号(撇号 ')中的单词视为 文字。

$ filesize=22
$ incommon=25
$ printf "%s\n" 'scale=2; ($incommon / $filesize) * 100)'
scale=2; ($incommon / $filesize) * 100)

在双引号内 ("),bash 特殊对待这些字符:

  • 反引号 (`)
  • 美元符号 ($)
  • 反斜杠 (\)
  • 有时感叹号(!)

你想要:

$ printf "%s\n" "scale=2; ($incommon / $filesize) * 100)"
scale=2; (25 / 22) * 100)

具体来说:

$ filesize=22
$ incommon=25
$ num="$(bc <<< "scale=2; ($incommon / $filesize ) * 100")"
$ printf "%s\n" "$num"
113.00