String 将wc-c与文件名一起使用时出错
我正在运行这段代码,它将文件排序到所需的文件夹中。如果文件名有13个字符,它应该运行第一条语句,否则运行第二条语句String 将wc-c与文件名一起使用时出错,string,bash,if-statement,string-length,wc,String,Bash,If Statement,String Length,Wc,我正在运行这段代码,它将文件排序到所需的文件夹中。如果文件名有13个字符,它应该运行第一条语句,否则运行第二条语句 for i in *.png; do if [ "$($i | wc -c)" -eq 13 ]; then echo cp $i $HOME/Desktop/final/pos_${i:0:1}/${i:0:3}.jpg else echo cp $i $HOME/Desktop/final/pos_${i:0:1}/${i:0:4}.jpg fi; done
for i in *.png; do if [ "$($i | wc -c)" -eq 13 ]; then
echo cp $i $HOME/Desktop/final/pos_${i:0:1}/${i:0:3}.jpg
else
echo cp $i $HOME/Desktop/final/pos_${i:0:1}/${i:0:4}.jpg
fi;
done
问题是,[“$($i | wc-c)”-eq 13]
始终为0,但显然,文件名有一定的长度。在if语句中计算wc-c的正确方法是什么?替换
[ "$($i | wc -c)" -eq 13 ]
借
或使用
[ ${#i} -eq 13 ]
使用
bash
string实用程序获取字符串长度。您根本不需要wc
。并在脚本中双引号引用所有变量,以避免shell进行分词
for i in *.png; do
if ((${#i} == 13)); then
echo cp "$i" $HOME/Desktop/final/pos_"${i:0:1}"/"${i:0:3}".jpg
else
echo cp "$i" $HOME/Desktop/final/pos_"${i:0:1}"/"${i:0:4}".jpg
fi
done
你以前在哪里p对于整个集合,也:
(${i}==13))
-算术:在cp
中使用引号。文件名可能包含空格。:)
for i in *.png; do
if ((${#i} == 13)); then
echo cp "$i" $HOME/Desktop/final/pos_"${i:0:1}"/"${i:0:3}".jpg
else
echo cp "$i" $HOME/Desktop/final/pos_"${i:0:1}"/"${i:0:4}".jpg
fi
done