关于 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
我正在学习 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