我想读取完整的文件名,但它总是自动以空格分隔
#!/bin/dash
for file in `ls | grep -E '(jpg)$' | sed 's/.jpg//g'`
do
echo ${file}
done
当文件名不包含空格或其他符号时,此操作将起作用。但它不能工作时,文件名如:A B C.jpg这将打印
A
B
C
用空格分隔文件名,怎样才能避免这种情况
未加引号的命令替换在IFS
上被分割(默认为空白)。
您可以使用shell glob扩展和shell后缀删除:
for file in *.jpg; do
[ -f "$file" ] || continue
name=${file%.jpg}
echo "$name"
done
*.[Jj][Pp][Gg]
用于不区分大小写的匹配(bash也有shopt -s nocasematch
)。