bash脚本中的错误替换

bash脚本中的错误替换,bash,Bash,我继承了一个bash脚本(难道遗产不是很好!),我正试图找出哪里出了问题 令人不快的是: while[“${\(\\\)}”-gt 0];执行 当我尝试运行它时,会收到一条“错误替换”错误消息。我很确定它试图询问arg的数量是否大于零,但你也知道这一点 我不知道它是否有用。我想反斜杠不够,或者可能太多,或者括号不属于这里。我试了几次,但都不走运 感谢您的任何启示。尽管原始行生成了您提到的错误消息(错误替换),但删除括号就足以解决问题。例如,在文件while num #!/bin/bash whi

我继承了一个bash脚本(难道遗产不是很好!),我正试图找出哪里出了问题

令人不快的是:
while[“${\(\\\)}”-gt 0];执行

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

我不知道它是否有用。我想反斜杠不够,或者可能太多,或者括号不属于这里。我试了几次,但都不走运


感谢您的任何启示。

尽管原始行生成了您提到的错误消息(错误替换),但删除括号就足以解决问题。例如,在文件
while num

#!/bin/bash
while [ "${#}" -gt 0 ] ; do
    echo $1
    shift
done
并与(例如)一起调用
/num 18173.msg 18179.msg 18201.msg
产生

18173.msg
18179.msg
18201.msg

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

我在回答时忽略了“反斜杠不够”这一点。
while
行附近的脚本中是否有反斜杠?如果一个脚本正在将一个脚本写入另一个文件,它可能会使用\$#来延迟对$#的计算。在处理类似这样的遗留代码时,始终假定它在某个点上起作用。我会检查你输入参数的有效性。是的,反斜杠被吃掉了,唉。实际代码如下所示,其中b表示反斜杠:while[“${b(b#b)}”-gt 0];我是否不确定反斜杠应该达到什么效果。@user1674956,您可能可以编辑帖子并将其放回;在
\(
的两边各打一个代码格式的反勾。没有整个上下文,我无法说出发生了什么。