expr:语法错误:意外参数“桌面”

expr:语法错误:意外参数“桌面”

这是我的 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 -fset -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是表达式中小数点后的位数。

相关内容