use*_*153 5 bash shell dash-shell
在bash和dash中运行程序时,我得到不同的输出
#!/bin/sh
echo $SHELL
n=1
a=$((++n))
echo $n
Run Code Online (Sandbox Code Playgroud)
击:
$ bash shell_test.sh
2
Run Code Online (Sandbox Code Playgroud)
短跑:
$ dash shell_test.sh
1
Run Code Online (Sandbox Code Playgroud)
dash是Debian Almquist shell,是一个完全符合POSIX标准的shell实现的极轻量级版本/bin/sh,旨在尽可能小地创建更快的启动时间.
运营商,如$((n++)),$((--n))和类似的是未由POSIX需要,因此没有实现的特征.
要了解破折号如何解释这些陈述,请参阅切普纳的答案
一个很好的页面解释如何使您的脚本POSIX兼容,就在这里.
2.6.4算术扩展: 算术扩展提供了一种机制,用于评估算术表达式并替换其值.算术扩展的格式如下:
Run Code Online (Sandbox Code Playgroud)$((expression))该表达式应被视为双引号,但表达式中的双引号未被特别处理.shell应扩展表达式中的所有标记,以便参数扩展,命令替换和引用删除.
接下来,shell应将其视为算术表达式并替换表达式的值.算术表达式应根据算术精度和操作中给出的规则进行处理,但以下情况除外:
- 只需要签名的长整数运算.
- 只有ISO C标准第6.4.4.1节中规定的十进制常量,八进制常量和十六进制常量常量才需要被识别为常量.
- 在
sizeof()运营商和前缀和后缀++和--运营商是不需要的.- 不支持选择,迭代和跳转语句.
++POSIX不需要前缀,dash也不实现它.相反,它被解析为两个一元运算+符:
$ n=1
$ echo $((+(+n)))
1
$ echo $((++n))
1
$ echo $n
1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |