Bash 使用temp变量会对数组产生不同的结果
有人能帮我解释一下在向数组中添加元素时temp变量的不同之处吗Bash 使用temp变量会对数组产生不同的结果,bash,macos,terminal,Bash,Macos,Terminal,有人能帮我解释一下在向数组中添加元素时temp变量的不同之处吗 #!/bin/bash declare -a finaldirs1 declare -a finaldirs2 declare -a files=("Planes" "Trains" "Automobiles") echo "A)..................................." for el1 in "${files[@]}"; do tmpe=$(printf "1:%s." "${el1}"
#!/bin/bash
declare -a finaldirs1
declare -a finaldirs2
declare -a files=("Planes" "Trains" "Automobiles")
echo "A)..................................."
for el1 in "${files[@]}"; do
tmpe=$(printf "1:%s." "${el1}")
finaldirs1+=($tmpe)
done
for elA in "${finaldirs1[@]}"; do
echo "First: " $elA
done
echo "B)..................................."
for el2 in "${files[@]}"; do
finaldirs2+=$(printf "2:%s." "${el2}")
done
for elB in "${finaldirs2[@]}"; do
echo "Second: " $elB
done
echo "DONE................................."
简而言之,第二个版本以某种方式将所有元素组合在一起。输出:
A)...................................
First: 1:Planes.
First: 1:Trains.
First: 1:Automobiles.
B)...................................
Second: 2:Planes.2:Trains.2:Automobiles.
DONE.................................
应该是
finaldirs2+=($(printf "2:%s." "${el2}"))
应该是
finaldirs2+=($(printf "2:%s." "${el2}"))
你漏掉了几个括号
#!/bin/bash
declare -a finaldirs1
declare -a finaldirs2
declare -a files=("Planes" "Trains" "Automobiles")
echo "A)..................................."
for el1 in "${files[@]}"; do
tmpe=$(printf "1:%s." "${el1}")
finaldirs1+=($tmpe)
done
for elA in "${finaldirs1[@]}"; do
echo "First: " $elA
done
echo "B)..................................."
for el2 in "${files[@]}"; do
finaldirs2+=($(printf "2:%s." "${el2}"))
done
for elB in "${finaldirs2[@]}"; do
echo "Second: " $elB
done
echo "DONE................................."
你看,在一个数组中加上arr+=('element'),而
arr+='element'
只会在字符串中加上arr
,你漏掉了几个括号
#!/bin/bash
declare -a finaldirs1
declare -a finaldirs2
declare -a files=("Planes" "Trains" "Automobiles")
echo "A)..................................."
for el1 in "${files[@]}"; do
tmpe=$(printf "1:%s." "${el1}")
finaldirs1+=($tmpe)
done
for elA in "${finaldirs1[@]}"; do
echo "First: " $elA
done
echo "B)..................................."
for el2 in "${files[@]}"; do
finaldirs2+=($(printf "2:%s." "${el2}"))
done
for elB in "${finaldirs2[@]}"; do
echo "Second: " $elB
done
echo "DONE................................."
你看,附加到数组就像arr+=('element')
,而arr+='element'
只会附加到字符串arr