我继承了一个 bash 脚本(遗产不是很好!),我正试图找出问题所在。
违规行是这样的:
while [ "${\(\#\)}" -gt 0 ] ; do
当我尝试运行它时,我收到“错误替换”错误消息。我很确定它试图询问 args 的数量是否大于零,但你也知道。
我不知道它是否曾经奏效。我想没有足够的反斜杠,或者可能太多,或者括号不属于那里。我尝试了其中的几个,但没有运气。
任何启蒙表示赞赏。
我继承了一个 bash 脚本(遗产不是很好!),我正试图找出问题所在。
违规行是这样的:
while [ "${\(\#\)}" -gt 0 ] ; do
当我尝试运行它时,我收到“错误替换”错误消息。我很确定它试图询问 args 的数量是否大于零,但你也知道。
我不知道它是否曾经奏效。我想没有足够的反斜杠,或者可能太多,或者括号不属于那里。我尝试了其中的几个,但没有运气。
任何启蒙表示赞赏。
尽管原始行产生了您提到的错误消息(错误替换),但仅删除括号就足以解决问题。例如,在文件中包含以下内容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
(即不需要引号和大括号,因为$#
返回一个数字)。