11.9转让

在一行中设置多个变量时,请注意评估未定义。例如“foo=1 foo=2;echo$foo给予'1'使用Solaris 10/垃圾桶/桶,但'2“用巴什。你必须使用;'强制执行命令:'foo=1;foo=2;echo$foo”。

不要依赖以下内容来查找子目录/程序:

PATH=细分$PATH_SEPARATOR$PATH程序

因为这不适用于Zsh 3.0.6。使用这样的东西而是:

(PATH=subdir$PATH_SEPARATOR$PATH;导出路径;执行程序)

不要依赖赋值的退出状态:灰分0.2不变并传播最后一条语句的状态:

$false|foo=bar;echo$?1$false | | foo=`:`;echo$?0

更糟糕的是,QNX 4.25只是设置退出状态在任何情况下均为0:

$foo=`exit 1`;echo$?0

要指定默认值,请遵循以下算法:

  1. 如果默认值是文本并且不包含任何结束符支架,使用:
    :“${var='my-literal'}”
  2. 如果默认值不包含右大括号,则必须展开,并且正在初始化的变量不是IFS-split(即,它不是列表),然后使用:
    :${var=“$default”}
  3. 如果默认值不包含右大括号,则必须展开,并且正在初始化的变量旨在进行IFS-split(即,它是一个列表),然后使用:
    var=${var=“$default”}
  4. 如果默认值包含右大括号,则使用:
    test${var+y}|var=“有一个'}'”

在大多数情况下var=${var=“$default”}“很好,但如果如果有疑问,只需使用最后一个表格。请参阅外壳替换,个项目${无功功率,无功功率:-价值}'和'${无功功率,无功功率=价值}基本原理。