我们知道~
并$HOME
引用当前用户的主目录。(对我来说echo ~
== echo $HOME
)pandya
。
但我不能在 bash 脚本中使用它。这是一个简单的示例脚本:
#!/bin/bash
echo -n "Enter Directory Path:"
read dir1
cd $dir1
但是执行的时候报错No such file or directory
如下:
$ ./script
Enter Directory Path:~/Desktop
./script: line 4: cd: ~/Desktop: No such file or directory
如果/home/pandya
使用而不是~
,那么它正在工作。
同样的问题$HOME
。
因此,如何在此类 bash 脚本中正确cd
使用~
或使用?$HOME
您可以使用eval命令解决此问题:
因为在你的代码
$dir1
中不会存储~/Desktop
但它会存储/home/user/Desktop
所以你可以使用 eval 命令。在这里了解Eval命令
这是一个有效的例子。
如前所述,从输入扩展变量是关键。
当然,您不应期望当前的 shell 在脚本执行后会更改其工作目录。它将保持不受影响。
问题是波浪号扩展发生在变量扩展之前(
man bash
有关详细信息,请参见)。变量扩展只发生一次,所以被扩展了,但它里面$dir1
的字符串没有。$HOME
将目录路径指定为命令行参数可能更容易,而不是使用
read
从控制台读取它:shell 将为您展开它:并称之为
另一种选择是使用文件对话框而不是完全键入路径: