OnWorks Linux 和 Windows 在线工作站

商标

工作站免费在线托管

<上一页 | 内容 | 下一页>

意料之外的扩张

脚本中可能会出现仅间歇性出现的错误。 有时脚本会运行良好,有时会由于扩展的结果而失败。 如果我们返回丢失的分号并更改 对于一个空变量,我们


可以证明:



#!/斌/庆典


# 麻烦:演示常见错误的脚本


数字=


如果 [ $number = 1 ]; 然后

echo "数字等于 1。" 别的

echo "数字不等于 1。"

fi

#!/斌/庆典


# 麻烦:演示常见错误的脚本


数字=


如果 [ $number = 1 ]; 然后

echo "数字等于 1。" 别的

echo "数字不等于 1。"

fi


使用此更改运行脚本会导致输出:



[我@linuxbox ~]$ 麻烦

/home/me/bin/trouble: line 7: [:=: 一元运算符预期的数字不等于 1。

[我@linuxbox ~]$ 麻烦

/home/me/bin/trouble: line 7: [:=: 一元运算符预期的数字不等于 1。


我们得到这个相当神秘的错误信息,然后是第二个的输出 回音 命令。 问题是扩容 内的变量 测试 命令。 当命令:



[$数字=1]

[$数字=1]


经历扩展 为空,结果是这样的:


[ = 1]

[ = 1]


这是无效的,并产生错误。 这 = 运算符是一个二元运算符(它需要在每一侧都有一个值),但是缺少第一个值,所以 测试 命令需要一元运算符(例如 -z) 反而。 此外,由于 测试 失败(由于错误), if 命令接收一个非零退出代码并相应地采取行动,第二个 回音 命令被执行。

这个问题可以通过在第一个参数周围添加引号来纠正 测试

命令:


[“$数字”= 1]

[“$数字”= 1]


然后当发生扩展时,结果将是这样的:



[ "" = 1 ]

[ "" = 1 ]


这会产生正确数量的参数。 除了空字符串之外,在值可以扩展为多字字符串的情况下(如包含嵌入空格的文件名),还应使用引号。


OnWorks 的顶级操作系统云计算: