使用变量 bash shell 打开目录

open directory with a variable bash shell

我正在通过以下命令读入一个包含特定文件版本(例如:V1.0.10)的变量。

read Version

并且有可能该变量包含点,我通过下一个命令删除它们:

New_Version=`echo $Version | sed -e 's/\.//g'`

但是如果我稍后在脚本中使用这个变量,这个变量没有任何变化,我只使用 cd 命令:

cd /data/group/$New_Version

cd /data/group/"$New_Version"

然后错误:没有这样的文件或目录...:行...:cd:/data/group/V1010。 我仔细检查过,文件存在,名称正确,但他找不到或不认识目录?

我做错了什么?

希望有人能帮忙!

谢谢

更新:OP 说问题出在他输入的隐藏字符上。这个答案没有描述如何解决这个问题。尽管如此,OP 已将此答案标记为已接受。有关 OP 问题的实际解决方案,请参阅 Charles Duffy 的评论。

警告:我从字面上理解了你的问题描述中的所有内容,这导致了下面的答案。如果您提供将通过 $Version 传递的字符串的示例,这将有助于澄清问题。


据我了解,您正在使用 read Version 读取变量中文件的完整路径。现在如果你说 echo $Version 你应该得到 /path/to/foo.bar

我认为您不想 cd 进入文件 /path/to/foo.bar。你会得到一个错误:Not a directory,因为它是一个文件,而不是一个目录。

现在,考虑 sed -e /\.//g 将对路径名做什么。

echo "/path/to/foo.bar" | sed -e '/\.//g'
/path/to/foobar

/path/to/foobar真的存在吗?不,因为 foo.bar 是一个文件。你会得到一个错误:No such file or directory,因为 foobar 目录不存在。

如果我明白您要做什么,您正在尝试提取包含 $Version 指定文件的目录。命令 dirname /path/to/foo.bar 将 return /path/to。所以你要设置New_version=$( dirname "$Version" ),此时你应该可以cd $New_version

P.S。确保 $Version 读取的是绝对路径名,而不是相对名称,这样它就与您 运行 脚本的来源无关。