几个与算术相关的命令,Dash,POSIX shell,sh,Increment

杰克·贝克尔(JM Becker)

在POSIX Shell中,在变量前/后递增时,这两个示例之间有什么区别。它们似乎会产生相同的结果,但是使用方式会有所不同吗?您什么时候比另一个更喜欢?

X=$((X+1))

: $((X=X+1))
阿列克修斯(Alexios)

在第一个示例中,$((X+1))计算表达式X +1并扩展为结果,然后将结果赋给变量。

在第二个示例中,以一个$((X=X+1))增量递增X$((X++))也是有效且较短,但shell不一定支持),然后扩展为的新值$X,这是null命令的第一个参数:null命令将忽略其参数,并且结果将被丢弃(具有副作用)。

由于三个(相对主观的)原因,我个人更喜欢第一种形式:

  • null命令是晦涩难懂且容易被误解的地方,正如它经常成为此处令人困惑的问题的主题所表明的那样。
  • 就外壳语言的整体语法而言,第一种形式似乎更自然,甚至有点类似于旧的评估样式。
  • 第一种形式更清楚,更简洁,并且不包含命令。

如果您只修改一个命令的环境,则必须使用第一个版本,例如

X=$((X+1)) /usr/local/bin/something

您必须使用第二种形式将评估直接添加到参数中:

ls -la "file-$((X++))"   # or ...
ls -la "file-$((X=X+1))" # for better compatibility

这具有所需的副作用,节省了一行,而且非常清楚。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在POSIX shell(/ bin / sh)中处理变量作用域(由于while循环中的管道)?

在sh shell中找不到源命令

如何在不使用“ sh”或“ bash”命令的情况下运行shell脚本?

詹金斯管道sh似乎不尊重shell命令中的管道

命令替换中的POSIX Shell注释

我可以在POSIX sh脚本中避免使用此子shell吗?

POSIX sh:复合命令如何与管道一起使用?

如何设置由vim:sh命令产生的shell环境变量

如何使“ bind”命令在sh shell中工作

无法在我的Shell(sh)中访问命令历史记录

Linux / UNIX sh shell中的哪个命令返回我的当前目录?

POSIX shell脚本shebang#!/ bin / sh与#!/ usr / bin / env sh,有什么区别?

Shell脚本只能使用sh命令运行

shell_exec不为inkscape命令执行sh文件

如何在不使用“ sh”命令的情况下运行shell脚本?

将命令行参数传递到.sh(shell)文件

如何在Shell命令的输出上执行算术运算

将Windows 10上的Linux Shell(.sh)脚本与Bash或WSL相关联

如何在POSIX Shell脚本中创建算术循环?

Shell脚本返回:run.sh:第10行:SET:找不到命令

如何在一个命令中启动几个.sh?

为什么在命令模式下不导出我的shell(sh)变量?

从php执行Shell脚本,但是sh脚本中的命令无法运行

是否所有POSIX Shell都以相同的方式实现算术扩展$((...))?

sh shell 中的 Bash“源”命令的替换是什么?

使用 ansible shell 模块时如何使 aws 命令可用于 sh?

sh shell 数组中的命令输出

当命令在本地运行 (/bin/sh -c CMD) 与远程运行 (ssh node1 /bin/sh -c CMD) 时,shell(sh 或 csh)处理参数的行为是否不同?

找不到命令 -sh:shell 脚本错误