我正在尝试循环使用多个逗号分隔的字符串,字符串中的逗号数相同。
我试过下面的片段,但没有返回任何内容。
#!/bin/bash
ip1=“Ok1,ok2,ok3”
ip2=“ty1,ty2,ty3”
for i in ${ip[@]//,/}
do
echo $i
done
有人能建议我如何改变这个吗。
尽快用数组替换逗号分隔的字符串。如果它是一个硬编码的字符串,那就微不足道了:
ip1=(Ok1 ok2 ok3)
如果它来自外部源(例如,命令行参数或从文件中读取(,请使用read
:
ip1s="Ok1,ok2,ok3"
IFS=, read -a ip1 <<< "$ips1"
一旦有了数组,就可以使用数组语法进行迭代:
for i in "${ip1[@]}"; do
echo "$i"
done
如果你有多个数组想要步调一致地迭代,你可以迭代数组的密钥:
for i in "${!ip1[@]}"; do
echo "${ip1[i]}"
echo "${ip2[i]}"
done
(这忽略了稀疏数组的可能性,但你必须努力获得这些。在实践中,具有n
元素的数组通常具有密钥0,1,…n
-1。(
修复:
- 将
ip
更改为ip1
或ip2
- 将智能引号更改为常规引号:
“
→"
- 在最后的
/
后面添加一个空格,将逗号替换为空格
ip1="Ok1,ok2,ok3"
ip2="ty1,ty2,ty3"
for i in ${ip1//,/ }
do
echo "$i"
done
最好使用数组,这样项目就可以自然分离,而且不必进行任何字符串操作。
ip1=(Ok1 ok2 ok3)
ip2=(ty1 ty2 ty3)
for i in "${ip1[@]}"
do
echo "$i"
done