bash 中的算术语法

bash 中的算术语法

我收到以下算术值错误

#!/bin/bash
n=0
line_count=9
line_count=$(line_count)/3
echo $line_count
exit 0

预期结果是 3

[]$ ./test.sh
./test.sh: line 4: line_count: command not found
/3
[]$ more test.sh

答案1

来补充@Kusalananda的回答,除了标准sh语法之外:

line_count=$((line_count / 3))

bash还可以使用继承自的这些语法ksh(也可以在 中使用zsh):

  • ((行数 = 行数 / 3))
  • ((行数 /= 3))
  • 让 line_count/=3
  • 排版-i行数;行数=行数/3

bash( 和zsh) 还支持:

  • 行数=$[行数/3]

对于旧的 POSIX 之前的 Bourne/Almquist sh

line_count=`expr "$line_count" / 3`

答案2

bash算术展开由和其他一些 shell完成$(( ... )),例如

line_count=$(( line_count/3 ))

使用line_count=$(line_count)/3,您可以将命令的输出分配给后缀为 的line_count变量。line_count/3

这就是为什么您收到错误“line_count:找不到命令”然后输出/3

看看 ShellCheckhttps://www.shellcheck.net/ 它能够检查您的脚本是否存在常见问题。在这种情况下,它不会帮助您发现$(...)应该发现的情况,$((...))但那是因为$(line_count)这是完全合法的 shell 代码。它只是做了错误的事情。

相关内容