bash 中的算术语法

Bab*_*aba 3 bash shell-script arithmetic

我在算术值上遇到以下错误

#!/bin/bash
n=0
line_count=9
line_count=$(line_count)/3
echo $line_count
exit 0
Run Code Online (Sandbox Code Playgroud)

预期结果是 3

[]$ ./test.sh
./test.sh: line 4: line_count: command not found
/3
[]$ more test.sh
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 11

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

line_count=$((line_count / 3))
Run Code Online (Sandbox Code Playgroud)

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

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

bash(和zsh)还支持:

  • line_count=$[line_count/3]

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

line_count=`expr "$line_count" / 3`
Run Code Online (Sandbox Code Playgroud)


Kus*_*nda 7

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

line_count=$(( line_count/3 ))
Run Code Online (Sandbox Code Playgroud)

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

这就是为什么您会收到错误“line_count: command not found”然后输出/3.

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