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
,尽管这可能会使非专家感到困惑。在此处阅读更多相关信息。