在 Linux shell 中\有一个特殊字符

在 Linux shell 中\有一个特殊字符

有人能帮助我理解这个奇怪的问题吗?

我正在尝试重命名一长串文件夹。

我进入父目录并在文本文件中列出了要重命名的所有文件夹:

find PARENT_FOLDER/ -type d -name *Images > ~/Desktop/directory_listing

我在 LibreOffice Calc 中打开了列表文件,修改了需要修改的内容,使用“连接”功能为每个文件夹创建要重命名的命令等。

当我返回 CLI 并粘贴来自 Calc 的命令时,mv 失败,提示找不到要重命名的文件夹。好吧,这些文件夹确实存在,但经过进一步调查,我发现从 Calc 粘贴的文本在屏幕上显示 1 个反弹,但实际上包含 2 个!因此,我粘贴到 bash 中的文本如下:

mv Test\ Folder-1-Images TestFolder1

但它实际解释的是:

mv Test\\ Folder-1-Images TestFolder1

我使用 gedit 确认了这一点,其中文本中的命令行显示 1 个反斜杠,但如果我将其复制并粘贴到 gedit 内的搜索框中,它会显示 2 个!

为什么?如何解决/预防?

答案1

在 Linux shell 中\有一个特殊字符

它告诉 shell 解释器按字面意思处理下一个字符

也就是说,如果要将其\作为脚本命令的一部分传递,则必须使用它两次。第一个字符\被 shell 解释为特殊字符,告诉 shell 不要将下一个字符(在本例中为第二个字符)\视为特殊字符并将其传递下去。

在其他情况下,\后跟普通字符的 被视为 ,escape sequence这赋予该组合特殊用途。例如,\n将指针指向一个新行。

http://linuxcommand.org/wss0060.php其他示例。

另请参阅http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_03.html了解更多解释。

希望这可以帮助

相关内容