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
我有一个 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