关于 ls 输出和双引号的简单问题

Simple question about ls output and Double quotes

我正在学习 bash 所以这可能是一个简单的问题。我想了解在这种情况下会发生什么,此脚本没有实际用途。设 DTEST 为包含一些随机文件的目录。

for filename in " `ls DTEST/*` " ; do
        touch "$filename".txt
done

所以命令替换发生并且 ls 输出应该是 file1 file2 file3。然后因为命令替换是双引号 for 循环的第一行应该是 for filename in "file1 file2 file3"。我认为它应该只创建一个名为 file1 file2 file3.txt.

的文件

但我看到它想要创建一个名为 file1'$'\n''file2'$'\n''file3.txt.

的文件

我不明白 '$'\n'' 是从哪里来的。我在 bash 手册中读到,双引号 \ 后跟特殊字符,如 n 表示换行保留其特殊含义,但为什么会生成 \n?

ls DTEST/* 在单独的行上输出每个文件。此外,输出将包含目录名称(即 DEST/file1 等)。

当然,您永远不会在真实脚本中以这种方式使用 ls。相反,您只需使用

之类的东西
for filename in DEST/*
do
 ...
done