使用带有变量的 mkdir 时 Bash 添加空格

使用带有变量的 mkdir 时 Bash 添加空格

我观察到,当我使用变量创建目录时myvar=2099-100 mkdir $myvar && echo "done",bash 会在目录名称末尾添加一个空格。我在这里遇到的问题是,这种行为似乎非常不一致。

如果我运行,mkdir $myvar&& echo "done"空白就会消失。 如果我运行,mkdir ${myvar} && echo "done"空白就会消失。

不一致之处在于,如果我创建目录时目录末尾没有空格,则无法重现该问题。运行创建带有空格的目录的相同命令,创建的目录末尾却没有空格。

因此有两个问题:使用 bash 创建目录的最佳做法是什么。变量赋值是否应包含引号?运行 mkdir 时引用变量的正确方法是什么(是${var}符号吗?)?为什么 bash 在运行时添加空格mkdir $var &&,但在运行时不添加空格mkdir $var(我猜这与扩展有关)?为什么在创建没有空格的目录后,我无法重现带有空格的创建?扩展变量是否缓存在某处?

答案1

评论是正确的,问题在于不间断空格。我可能忘了补充一点,我在远程服务器上运行脚本,使用 heredoc 粘贴脚本(不幸的是,这是解决方法,终端劫持不起作用)。我正在从 Windows 终端 (WSL) 复制文本,我们都知道 Windows 剪贴板现在是如何工作的。

至于为什么我无法重现该问题,一旦在 vim 中修改文件并引入正确的空格字符,我就删除了从文本文件复制的空格。

我在这里学到的是,在将输入粘贴到终端之前要对其进行清理,因为这可能会导致很多不太明显的问题。

相关内容