【问题标题】:What does : at the beginning do? [duplicate]: 一开始是做什么的? [复制]
【发布时间】:2021-05-11 14:04:47
【问题描述】:

在阅读安装 bash 脚本时,我偶然发现了这一行:

: ${SUDO:=sudo}
"${SUDO}" apt install vim

我知道 SUDO 设置为 sudo 如果之前未设置 SUDO。 但是这里开头的冒号是做什么用的呢?

【问题讨论】:

  • here 的答案之一涵盖了它:仅使用参数扩展的副作用。在这种情况下,“如果 $SUDO 未设置或为空,则将其设置为 sudo”。
  • 只看这两行,可以简化为"${SUDO:-sudo}" apt install vim,效果相同;如图所示的两行保留设置SUDO,如果以后使用它可能会很有用。

标签: linux bash variables default colon


【解决方案1】:

: 是一个什么都不做的命令——忽略它的参数和任何输入,并以零退出状态退出。请参阅posix colonman colon

它通常用于无限循环:

while :; do

在空表达式中:

if something; do
     : do nothing
done

触发一些调试输出:

cmd=(strange command)
set -x
: "${cmd[@]}"  # set -x will show

用于临时注释掉内容以及用于带有此处文档的多行 cmets:

: <<EOF
   A multiline comment.
EOF

或者在您的问题中使用${...:=...} 扩展来为变量分配一些默认值(如果未设置变量)。请注意,您应该引用扩展,这样就不会发生文件名扩展,因为此类表达式中的文件名扩展可能会导致您的脚本在某些极端情况下无缘无故地神奇地滞后。

# SUDO="${SUDO:+sudo}"   <- you have to type SUDO twice :(
: "${SUDO:=sudo}"        # <- only type SUDO once!

【讨论】:

  • ...或者,在问题中,评估参数扩展而不尝试将结果作为命令运行。
猜你喜欢
  • 2013-02-17
  • 2021-11-03
  • 2014-06-24
  • 2012-05-22
  • 1970-01-01
  • 2012-08-04
  • 2017-05-06
  • 2011-05-04
  • 2021-01-28
相关资源
最近更新 更多