0%

Shell 参数

从技术上讲,参数包括传递给程序的参数(位置参数)、特殊的 shell 变量(例如 $# 和 $?)以及普通变量(也称为关键字参数)。位置参数不能直接赋值,但可以使用 set 命令重新赋值。

参数替换

参数值替换最简单形式就是使用 $,比如 $i 或者 $9

${parameter}

mv $file ${file}x

${parameter:-value}

如果 parameter 为空则使用 value echo ${nosuch:-hello}

echo Using editor ${EDITOR:-/bin/vi}

${parameter:=value}

和上面的一样,但是在 parameter 为空时,会使用 value 给它赋值。

不能给位置参数使用这种方式赋值,即 parameter 不能是数字。

上面的命令不能单独使用,因为 shell 在替换后,会立马执行命令,会报错。

1
2
3
4
$ PHONEBOOK=
$ {PHONEBOOK:=$HOME/phonebook}
sh: /users/steve/phonebook: cannot execute
$ : {PHONEBOOK:=$HOME/phonebook}

${parameter:?value}

如果 parameter 不为空,则 shell 使用 parameter 的值替换,如果为空,那么 shell 会把 value 写到标准错误然后退出,如果是 login shell,并不会真的退出。

如果 value 为空,那么 shell 使用默认值输出到标准错误 prog: parameter: parameter null or not set

1
2
$ PHONEBOOK=
$ : ${PHONEBOOK:?"No PHONEBOOK file"}

使用此构造器,可以轻松检查程序所需的变量是否已全部设置且不为空,通过返回值判断:

1
: ${TOOLS:?} ${EXPTOOLS:?} ${TOOLBIN:?} 

${parameter:+value}

${parameter:-value} 效果相反。

以上命令中的 value 可以是命令。WORKDIR=${DBDIR:-$(pwd)}

Pattern Matching Constructs

$