如何循环遍历 bash shell 中的两个拆分字符串?
How do I loop thru two split strings in bash shell?
我想遍历 bash shell.
中具有相同分隔符和相同项目数的两个字符串
我目前正在这样做:
string1=s1,s2,s3,s4
string2=a1,a2,a3,a4
IFS=','
count=0
for i in ${string1[@]}
do
echo $i
echo $count
// how can I get each item in string2?
count=$((count+1))
done
据我所知,我不能同时遍历两个字符串。如何在循环中获取字符串 2 中的每个项目?
将每个字符串的字段提取到单独的数组中,然后遍历数组的索引。
IFS=, read -ra words1 <<< "$string1"
IFS=, read -ra words2 <<< "$string2"
for ((idx = 0; idx < ${#words1[@]}; idx++)); do
a=${words1[idx]}
b=${words2[idx]}
echo "$a <=> $b"
done
s1 <=> a1
s2 <=> a2
s3 <=> a3
s4 <=> a4
您可以使用以下内容从两个字符串中读取:
#!/bin/bash
string1=s1,s2,s3,s4
string2=a1,a2,a3,a4
count=0
while read item1 && read item2 <&3; do
echo $((count++)): "$item1:$item2"
done <<< "${string1//,/$'\n'}" 3<<< "${string2//,/$'\n'}"
使用 ${//}
将逗号替换为换行有点难看,所以您可能更喜欢:
#!/bin/bash
string1=s1,s2,s3,s4
string2=a1,a2,a3,a4
count=0
while read -d, item1 && read -d, item2 <&3; do
echo $((count++)): "$item1:$item2"
done <<< "${string1}," 3<<< "${string2},"
这需要在字符串上添加一个终止符 ,
,这在我看来有点难看。
我想遍历 bash shell.
中具有相同分隔符和相同项目数的两个字符串我目前正在这样做:
string1=s1,s2,s3,s4
string2=a1,a2,a3,a4
IFS=','
count=0
for i in ${string1[@]}
do
echo $i
echo $count
// how can I get each item in string2?
count=$((count+1))
done
据我所知,我不能同时遍历两个字符串。如何在循环中获取字符串 2 中的每个项目?
将每个字符串的字段提取到单独的数组中,然后遍历数组的索引。
IFS=, read -ra words1 <<< "$string1"
IFS=, read -ra words2 <<< "$string2"
for ((idx = 0; idx < ${#words1[@]}; idx++)); do
a=${words1[idx]}
b=${words2[idx]}
echo "$a <=> $b"
done
s1 <=> a1
s2 <=> a2
s3 <=> a3
s4 <=> a4
您可以使用以下内容从两个字符串中读取:
#!/bin/bash
string1=s1,s2,s3,s4
string2=a1,a2,a3,a4
count=0
while read item1 && read item2 <&3; do
echo $((count++)): "$item1:$item2"
done <<< "${string1//,/$'\n'}" 3<<< "${string2//,/$'\n'}"
使用 ${//}
将逗号替换为换行有点难看,所以您可能更喜欢:
#!/bin/bash
string1=s1,s2,s3,s4
string2=a1,a2,a3,a4
count=0
while read -d, item1 && read -d, item2 <&3; do
echo $((count++)): "$item1:$item2"
done <<< "${string1}," 3<<< "${string2},"
这需要在字符串上添加一个终止符 ,
,这在我看来有点难看。