当前位置: 首页 > 知识库问答 >
问题:

循环通过逗号分隔的shell变量

冯育
2023-03-14

假设我有一个Unix shell变量,如下所示

variable=abc,def,ghij

我想使用for循环提取所有值(abcdefghij),并将每个值传递到过程中。

该脚本应该允许从< code>$variable中提取任意数量的逗号分隔值。

共有3个答案

赵智勇
2023-03-14

如果设置了不同的字段分隔符,则可以直接使用<code>for

IFS=","
for v in $variable
do
   # things with "$v" ...
done

您还可以将值存储在一个数组中,然后循环遍历它,如我如何在Bash中的分隔符上拆分字符串?:

IFS=, read -ra values <<< "$variable"
for v in "${values[@]}"
do
   # things with "$v"
done
$ variable="abc,def,ghij"
$ IFS=","
$ for v in $variable
> do
> echo "var is $v"
> done
var is abc
var is def
var is ghij

您可以在此解决方案中找到更广泛的方法,了解如何遍历逗号分隔的列表并为每个条目执行命令。

第二种方法的例子:

$ IFS=, read -ra vals <<< "abc,def,ghij"
$ printf "%s\n" "${vals[@]}"
abc
def
ghij
$ for v in "${vals[@]}"; do echo "$v --"; done
abc --
def --
ghij --
吕鸿朗
2023-03-14

您可以使用下面的脚本动态遍历您的变量,无论它有多少个字段,只要它只是用逗号分隔。

variable=abc,def,ghij
for i in $(echo $variable | sed "s/,/ /g")
do
    # call your procedure/other scripts here below
    echo "$i"
done

在 for 循环内的 dodone 之间,您可以调用过程 proc “$i”,而不是上面的回声“$i”调用。

更新:如果变量的值不包含空格,上面的代码片段可以工作。如果你有这样的需求,请使用一个可以改变< code>IFS的解决方案,然后解析你的变量。

希望这有所帮助。

叶桐
2023-03-14

不乱搞IFS
不调用外部命令

variable=abc,def,ghij
for i in ${variable//,/ }
do
    # call your procedure/other scripts here below
    echo "$i"
done

使用bash字符串操作http://www.tldp.org/LDP/abs/html/string-manipulation.html

 类似资料:
  • 我有以下数组: 我通过foreach循环得到结果: 现在我想用逗号分隔每个输出。有些可能是空的。 我读过php方法,但我不确定在这种情况下如何使用它,或者是否有更好的解决方案。

  • 问题内容: 我已经在堆栈溢出中给出的答案的帮助下更正了代码。我想循环通过逗号分隔的Id字符串,但无法这样做。下面给出的过程仅更新第一条记录,而不更新其他记录。需要进行哪些更正,才能循环通过逗号分隔的字符串。这是我的SP的代码 该代码如该帖子的答案中所提供。 我尝试使用find_in_set()函数,但仅当我从头开始传递id时才起作用,而如果我随机传递id则不起作用。这是我的表格脚本 int(11)

  • 问题内容: 我正在编写导出功能,我需要将联系人导出到Excel,并且遇到了技术难题-也许我的SQL技能的差距更接近事实了。;) 这是场景:我在数据库中有一堆联系人。每个联系人可以具有许多不同的角色,例如,一个联系人可以是C#开发人员和DBA,也可以是DBA和IT经理。它们分为三个表,如下所示: 不太难遵循。有一组联系人和一组角色。这些由相应ID上的ContactRole表连接。 导出联系人时,我需

  • 问题内容: 我有一个非常基本的场景(Angular有点新)。我正在尝试转换JSON: 至: 但我不知道如何生成单个“ p”。您怎么称呼ng-repeat 问题答案: 有用的一件事是创建一个“地图”过滤器,如下所示: 这是映射到命名属性的简单情况,您可以使其更加花哨并理解点表示法等。现在,在您的视图中,您可以执行以下操作: 因为地图过滤器返回一个Array,该数组在Javascript中已经具有内置

  • 问题内容: 我有一个像 我想把它分成那些字符串 如果我简单地打电话给我,那么在修剪之后我会得到不同的结果,因为在某些字符串中,例如,仍然有一个逗号。但我不想放在方括号中。有解决这个问题的优雅方法吗? 问题答案: 假设和没有嵌套和未转义。您可以使用以下方式进行拆分: 正则演示 如果逗号后面没有非圆括号和,则将匹配逗号,从而忽略和中的逗号。

  • 我试图验证数字1-8的逗号分隔列表。