为什么我的echo命令表现得像这样?

时间:2014-07-01 08:42:55

标签: bash echo

我是bash脚本的新手,我要求一点帮助! 我在bash中得到了一些不符合我想要的东西(但差不多),我的echo命令的行为对我来说似乎很奇怪,看看它:

TST='test'
TEST="${ADDR[3]}"_"$TST"
echo $TEST
#result : _test
echo ${ADDR[3]}
#result : 5 

您如何解释这些结果?在此先感谢:)

我的ADDR var定义如下:

#parsing the read line, split on whitespace
IFS=' ' read -ra ADDR <<< "$line"

这是我的完整脚本:

#!/bin/bash
NUMBER=2
{ read ;
while IFS= read -r line; do
echo "$NUMBER : $line"
IFS=' ' read -ra ADDR <<< "$line"
#If the countdown is set to 0, launch the task ans set it to init value
if [ ${ADDR[0]} == '0' ]; then
    #task launching
    echo `./${ADDR[1]}.sh ${ADDR[2]} &` 
    TST='test'
    TEST=${ADDR[3]}_$TST
    echo $TEST
    VAR=$(echo -E "${ADDR[3]}" | tr -d '\n')
    #countdown set to init value
    sed -i "$NUMBER c $VAR ${ADDR[1]} ${ADDR[2]} ${ADDR[3]}" listing.txt
else  
    sed -i "$NUMBER c $((ADDR-1)) ${ADDR[1]} ${ADDR[2]} ${ADDR[3]}" listing.txt
fi
((NUMBER++))
done } < listing.txt

1 个答案:

答案 0 :(得分:-4)

答案:以下情况很好,

TEST="${ADDR[3]}"_"$TST"

虽然我会推荐。

TEST="${ADDR[3]}_${TST}"

您需要做的是在此声明之前转储${ADDR[3]}并确认ADDR包含预期值。您也可以使用索引转储整个数组并确认所有条目

for ((i=0; i<${#ADDR[@]}; i++)); do
    printf "ADDR[%3d] %s\n" "$i" "${ADDR[$i]}"
done

这有助于隔离问题。对不起,早先的回答。课程[睡1:回答2]