【发布时间】:2017-04-17 21:21:55
【问题描述】:
我是 unix 的初学者,这是我的第一个带有 if 语句的 for 循环。我收到一条错误消息,提示 syntax error near unexpected token 'then'。请你帮我解决这个问题。我做错了什么。
for file in $@
do
if [[ ! -f $@ ]]
then
echo "Error. File does not exist."
exit $ERROR_NO_FILE
elif
then
chmod 755 $file
echo "File permissions have been changed."
exit $SUCCESS
fi
done
【问题讨论】:
-
[[ ! -f $@ ]]?诶?-f不能接受任意数量的参数,并且您不知道$@将扩展为多少。你想要[[ ! -f "$file" ]](由于[[ ]]的副作用,那里没有可接受的引用,尽管它仍然没有伤害)。 -
另外,你想要
for file in "$@"、chmod 755 "$file"等; - 事实上,这将严重破坏带有空格的文件名。通过shellcheck.net 运行您的代码并修复它找到的内容。 -
不要以使已有答案无效的方式更改您的问题。
-
我想知道为什么我必须编辑答案以确保正确性。现在我知道了,并恢复到旧版本。对不起!
-
不要写
for f in $@。报价很重要。它应该是for f in "$@"; do...或for f; do ...,除非您有一个非常特殊的用例并且知道其中的区别并且您实际上想要一个不带引号的$@。在这种情况下,您需要添加注释,准确解释不寻常用法的动机。