为什么这个使用变量值的 mkdir 命令不起作用?

为什么这个使用变量值的 mkdir 命令不起作用?

我想创建一个由变量值指定的目录。首先让我们确保可以通过最简单的命令创建该目录:

$ mkdir ~/opt
[ec2-user@ip-172-31-15-193 ~]$ ls ~/opt
[ec2-user@ip-172-31-15-193 ~]$ ls -l ~/opt
total 0

使用变量代替硬编码路径的语法是什么?以下是已尝试的方法:

$ BDIR="~/opt"
$ mkdir $BDIR
mkdir: cannot create directory ‘~/opt’: No such file or directory

还:

$ mkdir "$BDIR"
mkdir: cannot create directory ‘~/opt’: No such file or directory

答案1

通常情况下,你所做的是有效的。但这里是“~”字符欺骗了你。

您不能在 bash 提示符之外使用“~”,因为它是shell 扩展

您需要明确使用$HOME变量:

BDIR="$HOME/opt"

或者您可以省略引号,这样 BDIR 分配将分配给扩展路径,并且它将起作用:

BDIR=~/opt

(如果需要,您可以使用斜线 - 来转义空格BDIR=~/path\ with\ spaces)。

或者,正如@Attie 建议的那样,将波浪号放在引号外面:

BDIR=~"/opt"

相关内容