这是非常基本的,我想我错过了一些非常明显的东西......
下面的顺序应该解释它:
$ cat read_file_names.sh
#!/bin/bash
for i in $@ ; do
echo "$i"
done
$ touch "filename has many spaces"
$ ./read_file_names.sh filename\ has\ many\ spaces
filename
has
many
spaces
理想情况下,命令行将在文件名周围加上引号,如下所示:
$ ./read_file_names.sh "filename\ has\ many\ spaces"
问题是当允许 bash 自动完成文件名时(通过点击选项卡),文件名没有被引用。相反,它有一个反斜杠空格“\”来表示空格。我知道我可以手动添加引号,但这会很乏味并且用户体验很差。
我正在寻找一种将整个文件名分配给 for-loop 变量的解决方案,以便输出看起来像这样:
$ ./read_file_names.sh filename\ has\ many\ spaces
filename has many spaces