与字符串变量的绝对路径构造相关的Bash问题

时间:2014-04-28 22:36:23

标签: arrays string bash

尝试使用bash从多个字符串变量构造绝对路径时,我遇到了奇怪的行为。在bash脚本中,我将用户指定的字符串放入名为project_file的变量中:

project_file="DemoCase.iec"

由此我创建了一个名为pbase的新变量,它只存储此字符串的基本名称,如下所示:

pbase="${project_file%.*}"

我还创建了一个名为pfile的变量,用于存储此project_file的完整路径,如下所示:

pfile=$(find $(pwd) -name "${project_file}" -type f 2>/dev/null)

接下来,我按以下方式解析此project_file的内容,并将内容放入数组中:

name=( $(cat ${pfile} | grep -A 2 "MyTargetString" | \
    grep "MyTargetSubString" | awk '{print $2}') )

在这个例子中,数组中填充了4个元素(每个都是一个字符串),我可以通过以下方式确认:

echo ${#name[@]}

然而,当我去打印数组的所有元素时,如:

echo ${name[@]}

仅返回最后一个元素。我可以在for循环中回显数组中的每个参数,如:

for n in ${name[@]}
do
    echo "$n"
done

返回:

000
000-CPB
000-NLH-1H
000-NLH-5H

正如所料。现在,当我尝试使用这些元素来构造绝对路径时,如下所示:

rdir="${pbase}_${name[3]}"
rfile="$(dirname ${pfile})/${rdir}/${rdir}.run"

我最终看起来像是:

.runoCase8_000-NLH-5HoCase8_000-NLH-5H

而不是我希望构建的内容:

/home/username/work/shared/DemoCase8_000-NLH-5H/DemoCase8_000-NLH-5H.run

在这种情况下,是否有人可以解释我的问题?我注意到我是否使用以下方式构建rfile

rfile="$(dirname ${pfile})/${rdir}"

我明白了:

/home/username/work/shared/DemoCase8_000-NLH-5H

但是如果我在${rdir}之后放置任何内容,那么它似乎会在开头覆盖任何预先存在的字符。

0 个答案:

没有答案