使用 bash 输入包含空格和转义字符的文件夹

使用 bash 输入包含空格和转义字符的文件夹

我可以访问具有如下格式的文件夹列表: lastname, firstname(id) 当我尝试从终端输入文件夹时,看起来 cd test/lastname,\ firstname\(id\) 我不确定为什么在没有空格的地方有反斜杠。我的脚本可以访问凭据,并且使用反斜杠生成了精确的格式,但我仍然无法从 bash 脚本输入该文件夹。我使用的变量是这样的: folder="lastname,\ firstname\(id\)"

当我这样做时,cd $HOME/test/$folder/ 它说没有这样的文件夹。我尝试了针对不同问题提出的几种解决方案,但没有奏效。将其放在文件夹变量的双引号内以及整个表达式上也不起作用。我想我不知道出了什么问题,因此无法让它工作。如果有人能在这里帮助我那就太好了!

答案1

这:

我使用的变量是这样的:folder="lastname,\ firstname\(id\)"

将要不是工作。因为那么变量保持反斜杠:

[maulinglawns@ArchLinux ~]$ folder="lastname,\ firstname\(id\)"
[maulinglawns@ArchLinux ~]$ echo "$folder"
lastname,\ firstname\(id\)

因此,您会收到以下消息:

cd "slask/$folder" 
bash: cd: slask/lastname,\ firstname\(id\): No such file or directory

解决这个问题最简单的方法是将变量放入"".像这样:

[maulinglawns@ArchLinux slask]$ mkdir lastname,\ firstname\(id\)
[maulinglawns@ArchLinux slask]$ folder="lastname, firstname(id)"
[maulinglawns@ArchLinux slask]$ cd "$folder"
[maulinglawns@ArchLinux lastname, firstname(id)]$ 

这样,shell 就不会在变量中的空白处进行分割。阅读有关变量和引用的更多信息这里

答案2

引用您的扩展($folder是扩展,“参数扩展”):

$ cd "$HOME/test/$folder/"

如果将值放在单引号中:

$ folder='lastname, firstname(id)'

不需要反引号,上面的代码cd就能正常工作。

相关内容