【发布时间】:2017-06-04 13:06:24
【问题描述】:
#!/bin/bash
declare -r NUM1=5
NUM2 =4 # Line 4
num3=$((NUM1 + NUM2))
num4=$((NUM1 - NUM2))
num5=$((NUM1 * NUM2))
num6=$((NUM1 / NUM2)) # Line 9
echo "$num3"
echo $((5**2))
echo $((5%4))
我正在使用这个 bash 脚本,当我运行该脚本时,我得到了错误
./bash_help
./bash_help: line 4: NUM2: command not found
./bash_help: line 9: NUM1 / NUM2: division by 0 (error token is "NUM2")
5
25
1
所以我把代码改成了这个,错误就消失了。
#!/bin/bash
declare -r NUM1=5
NUM2=4
num3=$((NUM1 + NUM2))
num4=$((NUM1 - NUM2))
num5=$((NUM1 * NUM2))
num6=$((NUM1 / NUM2))
echo "$num3"
echo $((5**2))
echo $((5%4))
为什么在给变量赋值时不能使用空格?使用空格来提高代码的可读性是惯例。谁能解释一下?
【问题讨论】:
-
这只是
bash中的范式之一,你不能质疑它 -
在 shell 中,空格是重要的分隔符。在大多数情况下,您不能添加或删除它们以使事情看起来更好,因为它们会改变命令行的含义。
-
谢谢,虽然这是一个小问题。清晰可以减少错误。
-
清晰性和向后兼容性很少同时存在。 POSIX sh 于 1991 年首次发布,其根源可以追溯到 1970 年代。正如 Common LISP 是由历史 LISP 拼凑而成的丑陋且非常有用的庞然大物,Scheme 又小又漂亮,而且完全缺乏实用的库生态系统,bash 处于这种鸿沟的前者(旧的、丑陋的和有用的)方面。
-
顺便说一句,shellcheck.net 会自动为您捕获此类错误;非常值得使用(就此而言,可以在本地安装它,并让您的编辑器在您工作时自动运行它)。
标签: bash variables variable-assignment