我是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
答案 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]