use*_*123 3 bash quoting variable assignment tilde
如果我用引号定义一个变量:
TEMP="~/Dropbox"
Run Code Online (Sandbox Code Playgroud)
然后
ls $TEMP
Run Code Online (Sandbox Code Playgroud)
不会工作,而是
echo $TEMP | ls
Run Code Online (Sandbox Code Playgroud)
作品。
为了获得相同的结果,我还可以定义不带引号的变量,例如:
TEMP=~/Dropbox
Run Code Online (Sandbox Code Playgroud)
这样做我可以简单地输入
ls $TEMP
Run Code Online (Sandbox Code Playgroud)
我对它们之间的区别感到很困惑,我想知道我应该在何时何地分别使用这两种定义?
TEMP="~/Dropbox"
Run Code Online (Sandbox Code Playgroud)
上面定义了一个变量,它包含一个文字波浪号,后跟一个斜杠。因为它是在引号中,所以 shell 不会扩展~/
到主目录。观察:
$ echo "quotes=~/" noquotes=~/
quotes=~/ noquotes=/home/john1024/
Run Code Online (Sandbox Code Playgroud)
因此,如果您想~/
表示主目录,则~/
需要在引号之外。以下工作:
TEMP=~/"Dropbox"
Run Code Online (Sandbox Code Playgroud)
让我们考虑一下如果~/
用引号引起来会发生什么:
TEMP="~/Dropbox"
ls $TEMP
Run Code Online (Sandbox Code Playgroud)
上面的命令将查找文件,~/Dropbox
意思是Dropbox
在名为~
. 由于您很可能没有名为 的目录~
,因此ls
将返回一条错误消息:“没有这样的文件或目录。”
此外,下面的命令不会按照您的想法执行:
echo $TEMP | ls
Run Code Online (Sandbox Code Playgroud)
ls
忽略标准输入。一个裸ls
命令只列出当前目录中的文件,无论该目录是什么。