bash脚本中的错误替换

时间:2012-09-15 22:28:37

标签: bash

我继承了一个bash脚本(不是很棒的遗产!)而且我正在试图弄清楚出了什么问题。

违规行是这样的:      while [ "${\(\#\)}" -gt 0 ] ; do

当我尝试运行它时,我收到“错误替换”错误消息。我很确定它试图询问args的数量是否大于零,但你也知道。

我不知道它是否有效。我想有没有足够的反斜杠,或者可能太多,或者括号不属于那里。我试过其中几个,但没有运气。

任何启示都表示赞赏。

1 个答案:

答案 0 :(得分:2)

虽然原始行会生成您提到的错误消息(错误替换),但只删除括号应足以解决问题。例如,文件while-num

中包含以下内容
#!/bin/bash
while [ "${#}" -gt 0 ] ; do
    echo $1
    shift
done

并使用(例如)调用 ./while-num 18173.msg 18179.msg 18201.msg生成

18173.msg
18179.msg
18201.msg

在我的Ubuntu-12系统上,当第一行为#!/bin/sh时,会产生相同的输出。 (在Ubuntu上,默认shell是破折号而不是bash。)当while行更改为while[ $# -gt 0 ] ; do时,它也可以正常工作(即不需要引号和括号,因为$#返回一个数)。