Jus*_*tin 13 bash scripts syntax
BASH 脚本中的“空”运算符有什么意义?我知道if当您无话可说但需要一个命令来让程序正常运行时,它被用作命令后面的占位符。但它的总体用途是什么?你会在什么时候使用它?什么时候使用它才有意义?
gle*_*man 17
允许参数扩展的副作用发生有时很有用。
例如,设置默认值
read -p "Enter your name: " name
: ${name:=John Doe} # if the user entered an empty string
echo "$name"
Run Code Online (Sandbox Code Playgroud)
cho*_*oba 13
您还可以将其用于无限循环:
while : ; do
# ....
done
Run Code Online (Sandbox Code Playgroud)
您可以使用它在不运行程序的情况下创建文件:
: > /path/to/file
Run Code Online (Sandbox Code Playgroud)
这比touch /path/to/file
(因为它不需要运行touch程序)快得多,并且可能比简单的更便携
> /path/to/file
Run Code Online (Sandbox Code Playgroud)
这似乎适用于许多系统。同样,它可用于检查您是否对文件具有写权限:
if { : >> /path/to/file;} 2> /dev/null
then
echo "writeable"
else
echo "write permission denied"
fi
Run Code Online (Sandbox Code Playgroud)
尽管这通常也可以在没有:. 注意事项:
(有关为什么这比 更可靠的原因,请参阅链接的问题if [ -w /path/to/file ]。)
回想起来,在 Unix V6 和 Thompson Shell 中,:实际上将 用作goto语句的一部分。根据手册,它最初出现在 Unix 版本 3 中:
在整个命令文件中搜索以 : 作为第一个非空白字符开头的行,然后是一个或多个空格,然后是标签。如果找到这样的行,goto 将命令文件偏移重新定位到标签后的行并退出。这会导致外壳转移到标记线。
如今,在 中bash,它被用作无操作运算符,返回成功。事实上,如果你看看源代码,你会看到,无论是true与:使用相同的功能,int colon_builtin(),下面。没有:非内置命令,/bin/true它实际上是一个相当大的命令。
:可以在任何使用的地方true使用,例如 in command_that_can_fail || true,尽管这可能会使非专家感到困惑。在此处阅读更多相关信息。