Shell脚本用variables改变目录

我知道这个问题已经被问了很多次了,但是我还是找不到任何好的解决办法。 因此,再问一次,如果有人可以帮助!

我想借助一个variables来改变我的工作目录在一个shell脚本里面。 但是我每次都得到" No such file or directory"

 #!/bin/bash echo ${RED_INSTANCE_NAME} <-- This correctly displays the directory name cd $RED_INSTANCE_NAME <-- This line gives the error 

现在,当我尝试给实际的目录名称而不是使用variables时,shell更改目录没有问题

 cd test <-- No error 

有谁知道这里可能是什么问题? 请帮忙 !!

你的变量包含一个回车。 试着说:

 cd $(echo $RED_INSTANCE_NAME | tr -d '\r') 

它应该工作。 为了从变量中删除CR,你可以这样说:

 RED_INSTANCE_NAME=$(echo $RED_INSTANCE_NAME | tr -d '\r') 

以下将说明这个问题:

 $ mkdir abc $ foo=abc$'\r' $ echo "${foo}" abc $ cd "${foo}" : No such file or directory $ echo $foo | od -x 0000000 6261 0d63 000a 0000005 $ echo $foo | tr -d '\r' | od -x 0000000 6261 0a63 0000004 $ echo $'\r' | od -x 0000000 0a0d 0000002 

尝试

 cd "$RED_INSTANCE_NAME" 

另外,请确保路径对执行cd命令的当前目录有意义。

遇到你所描述的问题的一种方法是在变量名中加一个波浪号( ~ )。 改用绝对路径或$HOME变量。 请注意,使用$HOME将需要双引号。

 # doesn't work $ vartilde='~/' $ cd $vartilde -bash: cd: ~: No such file or directory # works $ varfullpath='/Users/recurvirostridae' $ cd $varfullpath # works $ varwithhome="$HOME" $ cd $varwithhome 

我不知道你怎么了,但我可以提供一个一般的建议:

 cd "$RED_INSTANCE_NAME" # Quote the string in case it has spaces.error 

你几乎总是把“$ VARIABLE”放在引号中。 当变量的值包含有趣的东西(如空格)时,这将防止意外。

你可以检查回车符,ANSI转义符和其他特殊字符

 cat -v <<< "$RED_INSTANCE_NAME" 

这将显示echo $RED_INSTANCE_NAME只会隐藏或忽略的所有字符。

特别是,如果你的错误信息是: No such file or directory ,而不是bash: cd: yourdir: No such file or directory ,这意味着你有一个回车在变量的末尾,可能是从DOS读取它格式化的文件。