Shell扩展

    感兴趣的话可以阅读。

    大括号扩展让生成任意的字符串成为可能。它跟 文件名扩展 很类似,举个例子:

    大括号扩展还可以用来创建一个可被循环迭代的区间。

    1. echo {00..8..2} # 00 02 04 06 08

    在bash中,执行算数运算是非常方便的。算数表达式必须包在$(( ))中。算数扩展的格式为:

    1. result=$(( ((10 + 5*3) - 7) / 2 ))

    在算数表达式中,使用变量无需带上$前缀:

    单引号和双引号之间有很重要的区别。在双引号中,变量引用或者命令置换是会被展开的。在单引号中是不会的。举个例子:

    1. echo "Your home: $HOME" # Your home: /Users/<username>
    2. echo 'Your home: $HOME' # Your home: $HOME

    调用第一个echo时给了它5个单独的参数 —— $INPUT被分成了单独的词,在每个词之间打印了一个空格。第二种情况,调用echo时只给了它一个参数(整个$INPUT的值,包括其中的空格)。

    来看一个更严肃的例子:

    1. FILE="Favorite Things.txt"
    2. cat "$FILE" # 输出一个文件: `Favorite Things.txt`

    尽管这个问题可以通过把FILE重命名成Favorite-Things.txt来解决,但是,假如这个值来自某个环境变量,来自一个位置参数,或者来自其它命令(, cat, 等等)呢。因此,如果输入 可能 包含空格,务必要用引号把表达式包起来。