如何在shell中读取完整的文件名



我想读取完整的文件名,但它总是自动以空格分隔

#!/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)。

相关内容

  • 没有找到相关文章

最新更新