我一直在使用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以及所有括号,所以我不明白为什么我会收到语法错误。
答案 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}
)有关,这使得它无法进行特殊处理。)