"〜/ Desktop/test.txt:没有这样的文件或目录"

Mas*_*son 35 unix bash shell

我写过这个剧本:

#!/bin/bash

file="~/Desktop/test.txt"
echo "TESTING" > $file
Run Code Online (Sandbox Code Playgroud)

该脚本不起作用; 它给了我这个错误:

./tester.sh: line 4: ~/Desktop/test.txt: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Mic*_*man 58

尝试更换~$HOME.仅在波浪线未引用时才会发生Tilde扩展.见info "(bash) Tilde Expansion".

你也可以file=~/Desktop不引用它,但如果你用它中的字段分隔符替换它的一部分,那么它将会中断.引用变量的值可能是养成习惯的好事.引用变量file=~/"Desktop"也会起作用,但我觉得这很难看.

$HOME在可能的情况下,首选的另一个原因是:波浪扩展只发生在单词的开头.因此,command --option=~/foo只有在command自身代价扩展时才会起作用,这将随命令而变化,同时command --option="$HOME/foo"始终有效.

  • @Mason - 同样,波浪扩展发生_before_变量扩展,所以当`$ file`转换为`〜/ Desktop/test.txt`时,你已经错过了波浪扩展阶段.有关扩展顺序,请参见http://www.gnu.org/software/bash/manual/bashref.html#Shell-Expansions. (4认同)