在bash中一次循环变量2元素
发布时间:2020-12-16 01:51:58 所属栏目:安全 来源:网络整理
导读:我有一个bash变量,它是一个以空格分隔的字符串列表,并且希望循环从该列表一次迭代2个元素.我已经确定列表的长度可以被2整除.所以我想要类似的东西: x="a bb cccc d"while read first second; do echo "($first,$second)"done $x 输出应该是: (a,bb)(cccc,d
我有一个bash变量,它是一个以空格分隔的字符串列表,并且希望循环从该列表一次迭代2个元素.我已经确定列表的长度可以被2整除.所以我想要类似的东西:
x="a bb cccc d" while read first second; do echo "($first,$second)" done <<< $x 输出应该是: (a,bb) (cccc,d) 目前上述收益率: (a,bb cccc d) 注意:我需要在循环中分配$first和$second. echo作为占位符放入. 解决方法
根据您对值的要求,您可以执行以下操作:
$x="one two buckle myShoe" $xargs -n 2 printf "(%s,%s)n" <<<$x (one,two) (buckle,myShoe) 我假设您确实想要将值分配给shell变量,并且预期循环的主体比简单的格式化打印更复杂.实际上,由于printf会自动重复格式,直到其参数耗尽为止,上面例子中的xargs是不必要的;它可能只是: printf "(%s,%s)n" $x 不幸的是,xargs不是内置的,所以你不能xargs任意bash管道.你也不能只定义一个shell函数并给xargs命名.但是,你可以使用一个bash子shell,它提供了一个非常通用的解决方案: # Shell function which takes two arguments doit() { echo "Number of arguments: $#" echo "First argument: $1" echo "Second argument: $2" } # Make the function visible to subshells export -f doit x="one two buckle myShoe" xargs -n2 bash -c 'doit "$@"' _ <<<$x 最后,根据评论中的讨论,您可以使用printf或xargs(但可能printf更有效,因为它是内置的)将列表重新组织成对,然后将其提供到while循环中: printf "%s %sn" $x | while read -r first second; do echo "($first,$second)" done (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |