Bash命令以冒号开头,另一个冒号在等号之前

时间:2015-05-08 14:16:47

标签: bash colon

我找不到任何可以解释下面语法的文档。 它在bash脚本中做了什么?这是考试吗?

: ${foo:=bar}; export foo

1 个答案:

答案 0 :(得分:6)

:命令是null utility

  

该实用程序只能扩展命令参数。它在需要命令时使用,如if命令的then条件,但命令不会执行任何操作。

另外Bourne Shell Builtins

  

除了扩展参数和执行重定向之外什么都不做。返回状态为零。

${foo:=bar}语法是一种特殊的Parameter Expansion

${parameter:=[word]}
     

指定默认值。如果参数未设置或为null,则应将字的扩展(如果省略字,则为空字符串)分配给参数。在所有情况下,参数的最终值应替换。只能以这种方式分配变量,而不是位置参数或特殊参数。

Bash参考手册entry

${parameter:=word}
     

如果参数未设置或为null,则将字的扩展分配给参数。然后替换参数的值。不能以这种方式分配位置参数和特殊参数。

所以问题中的命令行是:

: ${foo:=bar}; export foo

有两个命令:

  1. : ${foo:=bar}
  2. export foo
  3. 第一个扩展变量foo,如果它为空或未设置,则为其赋值bar

    然后第二个为子shell和其他进程导出foo变量。