我想运行一个以货币格式接受参数的脚本。示例:
> ./myscript $55.50
total is $55.50
> ./myscript $3.40
total is $58.90
现在,无论我如何努力地逃避争论中的美元符号,我得到的还是:
> ./myscript $55.50
total is $5.50
> ./myscript $3.40
total is $5.90
那么你究竟如何在 shell 脚本中处理货币金额?显然,如果我在脚本中指定金额,我就可以正确地转义它们:variable='$65' OR variable="\$65'
但是如何从标准输入或命令行参数读取这些输入呢?
答案1
只需在命令行中转义美元符号即可。Bash 会在将其作为参数传递给脚本之前对其进行解释。这就是为什么 5.50 被传递给脚本(变量 $5 没有值)
./myscript \$55.50
答案2
转义参数的另一种方法是将其括在单引号中,就像在脚本中一样:
./myscript '$55.50'
在将参数传递给可执行文件之前,shell 会执行变量扩展。美元符号会引入参数扩展(以及命令替换和算术扩展)。在本例中,由于美元符号后面有一个数字,因此它被视为位置参数,因此它会查找第五个参数。由于您是在交互式 shell 中的命令提示符下,因此它不太可能有任何值(set --
不过,您可以对此进行影响)。
$ echo $55.50
5.50
$ echo \$55.50
$55.50
$ echo '$55.50'
$55.50
$ set -- aaa bbb ccc ddd eee fff
$ echo $55.50
eee5.50