考虑脚本print_folder.sh
:
echo $1
ls -F $1
这个简单的脚本希望用户通过第一个参数提供文件夹的名称。该脚本将首先打印出文件夹的名称,然后显示其内容。
现在,让我们考虑$1
的两种情况:一种情况是$1
不包含空格,另一种情况是$1
包含空格。
[nikola@leviathan ~]$ ./print_folder.sh Pictures/
Pictures/
Gifs/ Miscellaneous/ Screenshots/ Wallpapers/
没问题,一切正常。
案例2:空格
[nikola@leviathan ~]$ ./print_folder.sh Templates/URxvt\ Colorschemes/
Templates/URxvt Colorschemes/
ls: cannot access 'Templates/URxvt': No such file or directory
ls: cannot access 'Colorschemes/': No such file or directory
看,这是问题所在。原因显然是$1
的值为Templates/URxvt Colorschemes
而不是Templates/URxvt\ Colorschemes
。
$1
包含表示特殊字符的反斜杠而不是将其删除?另外,请记住,我不会接受类似的变通方法,例如使ls
“正常”读取空格(即,
被读取为文件夹名称中的空格,而不是另一个文件夹名称),因为我不只将$1
用作ls
的参数,所以其他命令可能无法使用。
答案 0 :(得分:0)
让ls
(或任何命令)将变量解析为单个参数而不是两个参数的更好,更安全,更简单的方法是,在使用时,不要在变量中插入引号,而用引号引起来它:ls -F "$1"
。