虽然提供的答案解决了您手头的任务,但它们没有解释原因bash
并且echo
“忘记”打印字符串中的空格。让我们先做一个小例子来说明问题。我只是在我的 shell 中运行命令,这个不需要真正的脚本:
mogul@linuxine:~$ echo something
something
mogul@linuxine:~$ echo something
something
两个 echo 命令都在行的开头打印一些东西,即使第一个在echo
和something之间有足够的空间。现在引用:
mogul@linuxine:~$ echo " something"
something
注意,这里 echo 在某事之前打印了前导空格
如果我们将字符串填充到变量中,它的工作方式完全相同:
mogul@linuxine:~$ str=" something"
mogul@linuxine:~$ echo $str
something
mogul@linuxine:~$ echo "$str"
something
为什么?
因为shell(在您的情况下为bash)会在将命令传递给子进程之前删除命令参数之间的空格。通过引用字符串,我们告诉 bash 我们的意思是字面意思,它不应该与字符串混淆。
如果您要处理具有有趣名称的文件,例如“这是一个 name.txt 中有空格的文件”,这些知识将变得非常有价值