2

我继承了一个 bash 脚本(遗产不是很好!),我正试图找出问题所在。

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

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

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

任何启蒙表示赞赏。

4

1 回答 1

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 是 dash 而不是 bash。)当while行更改为时它也可以正常工作while[ $# -gt 0 ] ; do(即不需要引号和大括号,因为$#返回一个数字)。

于 2012-09-15T22:40:35.207 回答