假设我在bash中增加一个变量。例如,
> i=0; for f in `ls *.JPG`; do echo $f $i; ((i++)); done a0.jpg 0 a1.jpg 1 ...
现在我想知道为什么我需要这些双括号来增加i
。
答案 0 :(得分:4)
i++
是一个非常有效的文件名,如果我有权访问你的系统,我可以将它变成一个你不想要的命令。
尝试使用以下内容创建文件/bin/i++
:
#!/bin/sh
echo 'Gotcha'
然后chmod +x /bin/i++
答案 1 :(得分:4)
The double parentheses construct是一个支持算术运算的shell功能。 相同的构造也可用于Loops和特殊numerical constants。
此外,从第一个链接复制:
# -----------------
# Easter Egg alert!
# -----------------
# Chet Ramey seems to have snuck a bunch of undocumented C-style
#+ constructs into Bash (actually adapted from ksh, pretty much).
# In the Bash docs, Ramey calls (( ... )) shell arithmetic,
#+ but it goes far beyond that.
# Sorry, Chet, the secret is out.