bash - 使用嵌套的 for 循环 bash

标签 bash shell ubuntu ubuntu-16.04

我是第一次写 bash 脚本。我必须使用 nested for loop .我有一个这样的数组:

(foo,bar a,b)
数组中有两个元素,数组中的每个元素用逗号分隔。我希望数组中的每个元素都拆分并打印每个元素。我想要的最终结果是
foo
bar
a
b
我正在使用嵌套的 for 循环,如下所示,但我没有得到任何响应
    IFS=','
    echo "class names is::${classNames[@]}" // prints foo,bar a,b
    for ((n=0;n<${#classNames[@]};n++)){
    
    classes=${classNames[n]}
    
    for ((i=0;n<${#classes[@]};i++)){
    
    echo "${eachClass[i]}"
    
    }
    }

最佳答案

你可以:

arr=(foo,bar a,b)
for i in "${arr[@]}"; do
   while IFS=, read -ra arr_in; do
       for j in "${arr_in[@]}"; do
           echo "$j"
       done
   done <<<"$i"
done
或喜欢:
for i in "${arr[@]}"; do
   readarray -d, -t arr_in < <(printf "%s" "$i")
   for j in "${arr_in[@]}"; do
       echo "$j"
   done
done
要不就:
while IFS=, read -ra arr_in; do
    for j in "${arr_in[@]}"; do
       echo "$j"
    done
done < <(printf "%s\n" "${arr[@]}"
甚至:
while IFS=, read -ra arr_in; do
    printf "%s\n" "${arr_in[@]}"
done < <(printf "%s\n" "${arr[@]}"
但那说:
printf "%s\n" "${arr[@]}" | tr ',' '\n'
也会打印相同的。
不要使用 { }作为循环终止符 - 它是未记录的非常古老的 bash/shell 语法。使用do..done .classes=...是一个普通变量,而不是一个数组,并且在这样的赋值 IFS没关系 - 这里是 = 的右侧部分不是分词。要分配数组,请使用大括号 classes=(${classNames[n]}) .
您可以使用 IFS 拆分空格和逗号上的值:
IFS=', ' read -ra arr <<<"${arr[*]}"
for i in "${arr[@]}"; do
    echo "$i"
done
甚至喜欢:
while IFS= read -r i; do
    echo "$i"
done < <(IFS=', '; printf "%s\n" ${arr[*]})

关于bash - 使用嵌套的 for 循环 bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66134646/

相关文章:

linux - 如何知道我的终端的默认 shell 进程?

linux - awk 仅当行以结果开头时才匹配

macos - 如何在 OS/X 中获得 'seq' 命令行功能?

bash - 在 shell 中,如何在不使用太多条件语句的情况下有效地处理传递给函数的参数以调用其他程序?

linux - Eclipse、Ubuntu - Eclipse IDE 未启动(嗯有点)

ubuntu - oembed - 500 内部服务器错误

node.js - pm2进程停止运行

linux - 获取 tar 存档中特定文件的内容

windows - 用于在 cygwin 中指定动态配置文件名称的命令/语法

java - 使用 JSch 在 SSH 服务器上搜索文件以获取模式(使用 less 命令)