J. *_*ker 20 shell dash shell-script posix
在 POSIX Shell 中对变量进行 pre/post 递增时,这两个示例之间有什么区别。它们看起来会产生相同的结果,但它们的使用方式会不同吗?你什么时候更喜欢一个?
X=$((X+1))
: $((X=X+1))
Run Code Online (Sandbox Code Playgroud)
Ale*_*ios 23
在您的第一个示例中,$((X+1))
计算表达式 X + 1 并扩展为结果,然后将其分配给变量。
在第二个示例中,$((X=X+1))
递增X
1($((X++))
也是有效且更短的,但不一定受 shell 支持),然后扩展为 的新值$X
,这是 null 命令的第一个参数:
。null 命令忽略它的参数,结果被丢弃(有副作用)。
由于三个(相对主观的)原因,我个人更喜欢第一种形式:
如果您只修改一个命令的环境,则必须使用第一个版本,例如
X=$((X+1)) /usr/local/bin/something
Run Code Online (Sandbox Code Playgroud)
您必须使用第二种形式直接向参数添加评估:
ls -la "file-$((X++))" # or ...
ls -la "file-$((X=X+1))" # for better compatibility
Run Code Online (Sandbox Code Playgroud)
这具有所需的副作用,节省了一行,并且非常清楚。