2009-09-19 70 views
1

我需要验证参数是否是有效的文件名,这是正确的方法吗?我似乎在内联2中犯了一些错误,但我不知道在哪里。如何验证arg是否是Shell中的有效文件名?

for i in ${@}; do         
if [ -f ${i}]; then        
    echo ${i} 
else continue 
fi 
done 
+0

查看我更新的答案。 – 2009-09-19 18:22:13

回答

2

首先,您需要在方括号之前的空格。如果文件名有空格,你应该引用你的变量。

for i in "${@}"; do 
if [ -f "${i}" ]; then 
    echo "${i}" 
else continue 
fi 
done 

的“else continue”是不必要的,除非这对你计划落实到位“continue”别的东西的占位符。

+1

如果你正在循环位置参数,那么你可以说:for i;做...; DONE – 2009-09-19 19:21:06

1

这里是一个简洁的解决方案,它的工程,即使文件名包含空格:

for i 
do 
    test -f "$i" && echo "$i" 
done 

注意for语句假设命令行参数,则无需键入更多。测试命令是一个简短的方法,如果..然后.. fi

相关问题