我继承了一个bash脚本(不是很棒的遗产!)而且我正在试图弄清楚出了什么问题。
违规行是这样的:
while [ "${\(\#\)}" -gt 0 ] ; do
当我尝试运行它时,我收到“错误替换”错误消息。我很确定它试图询问args的数量是否大于零,但你也知道。
我不知道它是否有效。我想有没有足够的反斜杠,或者可能太多,或者括号不属于那里。我试过其中几个,但没有运气。
任何启示都表示赞赏。
答案 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
时,它也可以正常工作(即不需要引号和括号,因为$#
返回一个数)。