无法在 shell 中使用带有特殊字符的文件

caf*_*991 4 bash scripts

我想遍历一个目录,对于每个不是目录的文件,我想将名称附加在一起并用逗号分隔它们。

files=""
for f in $(ls ~/Downloads | grep -v ^d)
        do

                files+="$f"","

        done 
        echo "$files"
Run Code Online (Sandbox Code Playgroud)

这里的下载文件夹有这样的文件

这 : 01 - Agar Mujhse Mohabbat Hai - www.downloadming.com.mp3

预期输出:01 - Agar Mujhse Mohabbat Hai - www.downloadming.com.mp3

实际输出:01,-,Agar,Mujhse,Mohabbat,Hai,-,www.downloadming.com.mp3

欢迎所有解决方案。

gle*_*man 13

不要解析 ls

files=()

cd ~/Downloads
for file in *; do
    [[ -d $file ]] && continue
    files+=( "$file" )
done

printf "%s\n" "${files[@]}"

comma_separated=$(IFS=,; echo "${files[*]}")
echo "$comma_separated"
Run Code Online (Sandbox Code Playgroud)

如您所见,for f in $(ls)迭代输出中的单词,而不是linesls当您希望人眼看到文件时保存,并在您希望脚本对文件名执行某些操作时使用 shell 文件名模式。