尝试使用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}
之后放置任何内容,那么它似乎会在开头覆盖任何预先存在的字符。