2

下面是我正在编写的bash脚本:

dir=“~/path/to/$1/文件夹”如果[-d“$dir”];然后#做一些事情其他的echo“目录$dir不存在”;出口1fi(菲涅耳)

当我从终端运行它时:

> ./myscript.sh第123页目录~/path/to/123/folder不存在

但那个文件夹显然存在。这正常工作:

>ls~/path/to/123/文件夹

我做错了什么?

2个答案2

重置为默认值
5

问题是bash在替换shell参数之前执行波浪线展开,所以在替换之后~/path/to/文件夹对于$目录,它不会尝试扩展~,因此它查找一个按字面意思命名的目录,其中包含波浪号,但该波浪号当然不存在。请参见bash手册的第3.5节有关bash扩展的更详细解释,请参阅。

0
1

尝试:

dir=“$HOME/path/to/$1/folder”
1
  • 2
    就因为约阿金根本没有解释:你引用了~.~在波浪号展开期间,只在bash中展开,但您引用的任何内容都禁用了的特殊含义,因此波浪号(~)不再表示“展开到当前用户的主目录”。它的意思是:“当前目录中名为~的目录”。它不存在,因此出现了错误。 评论 2009年6月10日14:40

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.