这是我的 bash 脚本,用于将输入温度从摄氏度转换为华氏度。
#!/bin/bash
echo "Enter temperature in degrees Celsius: "
read celsius
temp=$(expr $celsius * 9 / 5 + 32 )
echo "Temperature in degrees Fahrenheit: $temp"
我收到此错误信息:
expr: syntax error: unexpected argument ‘Desktop’
你有什么解决办法?
答案1
该*
符号是一个 shell glob(文件名生成)字符,它将扩展为当前目录中非隐藏文件的列表 - 在您的情况下,它似乎包含一个Desktop
项目。
为了防止这种情况,您需要关闭 shell 通配符,使用set -f
或set -o noglob
:
#!/bin/bash
set -f
echo "Enter temperature in degrees Celsius: "
read celsius
temp=$(expr "$celsius" * 9 / 5 + 32 )
echo "Temperature in degrees Fahrenheit: $temp"
或者引用或转义该*
字符以使其成为文字:
#!/bin/bash
echo "Enter temperature in degrees Celsius: "
read celsius
temp=$(expr "$celsius" \* 9 / 5 + 32 )
echo "Temperature in degrees Fahrenheit: $temp"
无论哪种情况,您都应该养成使用双引号括住 shell 扩展的习惯,例如$celsius
, 以防止 shell 扩展和词拆分(尤其是当它们包含任意用户输入时)。
答案2
bc
修正了 bash 脚本,使用流行的终端程序(而不是第 4 行)将输入温度从摄氏度转换为华氏度expr
:
#!/bin/bash
echo "Enter temperature in degrees Celsius: "
read celsius
temp=`echo "scale=1; $celsius*1.8 + 32" | bc`
echo "Temperature in degrees Fahrenheit: $temp"
bc
“基本计算器”是一种任意精度计算器语言。bc 比笨拙地工作和摸索语法错误更直观、更易于使用expr
。函数的值scale
是表达式中小数点后的位数。