Bash目录变量错误

时间:2011-06-02 15:18:36

标签: bash variables

在bash脚本中,我到了这一点

read ENE CX CY CZ <<< $(head -n 1 RESULTS_${lach}tal2)
echo $ENE
SED_ARG="-e 's/-/m/g'"
read CX2 <<< $( echo ${CX} | eval sed "$SED_ARG")
read CY2 <<< $( echo ${CY} | eval sed "$SED_ARG")
read CZ2 <<< $( echo ${CZ} | eval sed "$SED_ARG")
DIREC="${CX2}_${CY2}_${CZ2}"
echo $DIREC
cd "$DIREC"

变量DIREC的值是目录的名称,我得到像

这样的东西
m25.1240_m22.1250_m5.1540

这个目录确实存在,如果我直接在bash中cd m25.1240_m22.1250_m5.1540它可以工作,我可以进去。但在脚本上它不起作用,我得到错误:

: No such file or directory: cd: m25.1240_m22.1250_m5.1540

我不明白为什么错误

PS:

echo "$DIREC" | od -c

给出

0000000   m   2   5   .   1   2   4   0   _   m   2   2   .   1   2   5
0000020   0   _   m   5   .   1   5   4   0  \r  \n
0000033

2 个答案:

答案 0 :(得分:1)

我怀疑在脚本里面,你的工作目录在别处,所以你不能cd。试试这个:而不是

cd "$DIREC"

替换为

echo current directory is $PWD
cd "m25.1240_m22.1250_m5.1540"

看看你是否还有同样的问题。

答案 1 :(得分:1)

您的RESULTS_${lach}tal2文件是否具有Windows样式的行结尾? CZ以回车结束吗?这表明了什么:

echo "$DIREC" | od -c

此外,还有很多不必要的评估正在进行中。 Bash可以在变量替换中进行替换:

read ENE CX CY CZ <<< $(head -n 1 RESULTS_${lach}tal2 | sed 's/\r$//')
DIREC="${CX/-/m}_${CY/-/m}_${CZ/-/m}"