bash脚本中的错误替换
我继承了一个bash脚本(难道遗产不是很好!),我正试图找出哪里出了问题 令人不快的是:bash脚本中的错误替换,bash,Bash,我继承了一个bash脚本(难道遗产不是很好!),我正试图找出哪里出了问题 令人不快的是: while[“${\(\\\)}”-gt 0];执行 当我尝试运行它时,会收到一条“错误替换”错误消息。我很确定它试图询问arg的数量是否大于零,但你也知道这一点 我不知道它是否有用。我想反斜杠不够,或者可能太多,或者括号不属于这里。我试了几次,但都不走运 感谢您的任何启示。尽管原始行生成了您提到的错误消息(错误替换),但删除括号就足以解决问题。例如,在文件while num #!/bin/bash whi
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,您可能可以编辑帖子并将其放回;在\(
的两边各打一个代码格式的反勾。没有整个上下文,我无法说出发生了什么。