CSH 中的浮点数?

CSH 中的浮点数?

我一直试图运行这个脚本,但由于小数 0.2224,它给出了错误“数字格式错误”。如果我用任何整数替换它,脚本就可以正常工作。

#!/bin/csh -f

set shift="-1 2  "

foreach d ($shift)
@ z = $d * "0.2224"

 awk -v k=$d 'FNR==3{$1+=4*k;}1' Lat | cat >>head
 awk -v k=$d '{$2+=k;}1' f1 | cat >>g1
 awk -v k=$d '{$2+=3*k;}1' f2 | cat >>g2
cat head g1 g2 > POSCAR-$z
rm head
rm g1
rm g2

答案1

Shell 变量是字符串,而不是数字。当您输入2或 时"0.2224",它会被视为字符串。Shell 可以处理一些简单的数据转换,因此十进制表达式可能有效;但浮点值不起作用。

要在 shell 中进行数学运算,您可以通过管道传输值bc并将其与命令替换(命令周围的反引号包装器)相结合:

set d = 2
set result = `echo "$d * 0.2224" | bc`
echo $result

本示例的语法是为 编写的csh/tcsh,但其原理在 中bash也适用。如果您需要比这更复杂的功能,您可能希望在 中实现脚本python

答案2

语句“set shift="-1 2"”会导致“数字格式错误”的错误。在 csh 脚本中,操作字符和变量或数字之间应该有空格。因此应该是“set shift = "-1 2"”。

相关内容