簡體   English   中英

為什么我的echo命令的行為如此?

[英]Why is my echo command behaving like this?

我是bash腳本的新手,我正在尋求幫助! 我在bash中有一點點東西,這並不能滿足我的要求(但幾乎沒有實現),而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"

這是我完整的腳本:

#!/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

答:以下很好,

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

這將有助於隔離問題。 對不起,較早的答案。 教訓[睡覺第一:回答第二]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM