我是bash脚本的新手,虽然我知道这无疑是一个重复的问题,但我无法弄清楚如何用它来搜索它。
for i in $( ls); do
FILETYPE=$( file -b $i )
if [ "$FILETYPE"="Apple binary property list" ]; then
echo $FILETYPE
else
echo "nope"
fi
done
我希望这只能打印
“Apple二元财产清单”
当声明成功时,否则只打印“nope”。
正在发生的是,无论语句是成功还是失败,它都会打印文件类型,并且永远不会打印“nope”。
我知道这很简单,但是有人可以告诉我为什么除了“Apple二元房产列表”和“nope”之外还打印其他内容, 以及我能做些什么来解决它?
答案 0 :(得分:2)
不要使用它:
for i in $( ls); do
因为当文件名包含*
之类的空格或字符时它会中断。使用此:
for i in *; do
*
扩展到目录中所有文件的列表。
出于相关原因,不要忘记引用shell变量:
FILETYPE=$( file -b "$i" )
这会将整个变量作为单个参数传递,这就是你想要的。
[
是一个命令,它接受一个由空格分隔的参数列表:
if [ "$FILETYPE" = "Apple binary property list" ]; then
如果没有空格,[
只会看到两个参数,"$FILETYPE"="Apple binary property list"
和]
。
再次,在变量周围使用引号:
echo "$FILETYPE"
答案 1 :(得分:0)