Bash - 意外的文件结束

时间:2014-09-25 11:49:03

标签: bash

我一直在使用bash脚本来运行程序测试,但我似乎无法找到语法错​​误。当我使用-x时,它告诉我它正在期待}但我无法找到它。

请参阅下面的代码。

#!/bin/bash
usagearg() {
    echo "You're missing an argument on the command line!" >&2}
usagemiss() {
    echo "A file requested in your filestem is missing or cannot be read!" >&2}
if [ ${#} -ne 2 ]; then
    usagearg;
    exit 1;
fi
x=1
endp=`wc -l ${1}`
end=$((endp+1))
while [ ${x} -ne ${end} ] ; do
    # redacted code which isn't related to the issue at hand.
done

我觉得我已经关闭了所有循环和ifs以及所有括号,所以我不明白为什么我会收到语法错误。

1 个答案:

答案 0 :(得分:1)

复合命令的大括号内的命令列表必须以分号或换行符终止;闭合支撑本身是不够的。

使用

usagearg() {
    echo "You're missing an argument on the command line!" >&2; }

usagearg() {
    echo "You're missing an argument on the command line!" >&2
}

如上所述,您的代码将右大括号视为另一个字符,并且是输出重定向的一部分,因为没有插入的空格。


至于为什么这是必要的,你必须回到bash定义某些字符的方式。有一组元字符,可以在不加引号时分隔单词。还有一组控制操作符,它们被模糊地定义为执行“控制功能”。右括号}不属于任何类别。 (为什么?我不确定,但我认为它与在参数扩展中使用大括号(${foo})有关,这使得它无法进行特殊处理。)