如何使命令行参数变量包含标记空格和其他特殊字符的反斜杠?

时间:2018-08-15 07:45:38

标签: linux bash

考虑脚本print_folder.sh

echo $1
ls -F $1

这个简单的脚本希望用户通过第一个参数提供文件夹的名称。该脚本将首先打印出文件夹的名称,然后显示其内容。

现在,让我们考虑$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的参数,所以其他命令可能无法使用。

1 个答案:

答案 0 :(得分:0)

ls(或任何命令)将变量解析为单个参数而不是两个参数的更好,更安全,更简单的方法是,在使用时,不要在变量中插入引号,而用引号引起来它:ls -F "$1"