Bash 为什么我的echo命令的行为是这样的?

Bash 为什么我的echo命令的行为是这样的?,bash,echo,Bash,Echo,我对bash脚本还不熟悉,我正在寻求一些帮助! 我在bash中有一个小scit,它不能实现我想要的(但几乎可以实现),我的echo命令的行为对我来说似乎很奇怪,看看它: TST='test' TEST="${ADDR[3]}"_"$TST" echo $TEST #result : _test echo ${ADDR[3]} #result : 5 你如何解释这些结果?提前感谢:) 我的ADDR变量定义如下: #parsing the read line, split on whitespa

我对bash脚本还不熟悉,我正在寻求一些帮助! 我在bash中有一个小scit,它不能实现我想要的(但几乎可以实现),我的echo命令的行为对我来说似乎很奇怪,看看它:

TST='test'
TEST="${ADDR[3]}"_"$TST"
echo $TEST
#result : _test
echo ${ADDR[3]}
#result : 5 
你如何解释这些结果?提前感谢:)

我的ADDR变量定义如下:

#parsing the read line, split on whitespace
IFS=' ' read -ra ADDR <<< "$line"
#解析读取行,按空格拆分

如果s=''read-ra ADDR回答:以下是好的

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

for((i=0;iTry
TEST=${ADDR[3]}{TST}
。你能告诉我你在哪里定义了ADDR吗?你的代码看起来很好。
$line
中有DOS回车吗?它会被显示出来,但会被覆盖。回车本身并不会前进到下一行。彻底摆脱CRs的明智方法是
tr-d'\015'-1这是完全错误的。到实际赋值发生。在带引号的字符串之间有一个不带引号的下划线是可以的。没错,真正的问题是因为CR符号导致了像Bushmills说的那样的覆盖!
for ((i=0; i<${#ADDR[@]}; i++)); do
    printf "ADDR[%3d] %s\n" "$i" "${ADDR[$i]}"
done