我不明白这行老的脚本在我的项目之一:
USER=${1:-`id -un`}
我不明白这行老的脚本在我的项目之一:
USER=${1:-`id -un`}
这是一个bash
参数扩展模式。
给定语句表示:
如果$1
(第一位置参数(自变量))的值是设置或者为空,则命令id -un
的输出将被设置为变量USER
如果参数$1
设置为非空,则$1
的扩展将设置为参数USER
。
而且变量USER
应宽在登录时设置会话,除非你有你不应该直接修改它一个很好的理由。然后,您可以在脚本中使用不同的变量名称作为解决方案。
检查man bash
的Parameter Expansion
部分以获得更多想法。
解析这样说:
${}
告诉你,这是一个parameter expansion:-
是使用:-
右手的default value如果左手是没有设置例如:
$ sv="set v"
$ echo ${sv:-`whoami`}
set v
$ echo ${not_set:-`whoami`}
dawg
还有其他形式的,包括:
${parameter:?word}
显示如果参数是未设置错误,的word
仅当
$ echo ${not_set:?'is not set to anything'}
-bash: not_set: is not set to anything
${parameter:+word}
替代值parameter
设置为
$ echo ${sv:+'substitute for sv'}
substitute for sv
${parameter:=word}
分配parameter
的word
如果parameter
值未设置
$ echo ${not_set:='now it IS set'}
now it IS set
$ echo "$not_set"
now it IS set
查看id
(man id
)的手册页,命令id -un
将返回用户的实际名称。
格式:-
只有在未设置左侧的内容时才会使用右侧的内容。有关此语法的更多信息,请参阅here。
因此,您提供的代码实质上是默认给用户,但如果提供的话,则将$USER
变量替换为值$1
。
即线被设置称为USER
变量的值:
USER=....
相等的右侧有几个等级。
${ }
。$1
。这就是为什么它是${1 ... }
。NUL
或未设置,${1:- }
正在测试值$1
。$1
是NUL
或取消设置,则将该值替换为-
的纵坐标。-
与}
之间的值是“命令替换”。id -un
。你可以理解它与man id
有什么关系。id -un
打印一个名称。当前用户(如果用户被省略)。同样的命令可以由$(id -un)
执行。
这将改变行这样的:
$ USER=${1:-$(id -un)}
将设置用户给定的位置参数1
或执行就行了当前用户的名称的名称。
要尝试它,你可以做一个函数:
$ tf(){ USER=${1:-$(id -un)}; echo "$USER"; }
如果给出值,该值将被打印回:
$ tf bind
bind
如果用户名没有给出,执行用户名称被打印:
$ tf
bize