bash – 使用xargs将行拆分为3个单独的参数
发布时间:2020-12-15 21:18:33 所属栏目:安全 来源:网络整理
导读:如果我有以下内容: $printf '%sn' "${fa[@]}"1 2 34 5 67 8 9 其中每一行都是一个新的数组元素.我希望能够通过空格分隔符拆分元素,并将结果用作3个单独的参数并输入xargs. 例如,第一个元素是: 1 2 3 在哪里使用xargs我想将1,2和3传递给一个简单的echo命令
如果我有以下内容:
$printf '%sn' "${fa[@]}" 1 2 3 4 5 6 7 8 9 其中每一行都是一个新的数组元素.我希望能够通过空格分隔符拆分元素,并将结果用作3个单独的参数并输入xargs. 例如,第一个元素是: 1 2 3 在哪里使用xargs我想将1,2和3传递给一个简单的echo命令,例如: $echo $0 1 4 7 $echo $1 2 5 8 $echo $2 3 9 6 所以我一直在尝试以下列方式: printf '%sn' "${fa[@]}" | cut -d' ' -f1,2,3 | xargs -d' ' -n 3 bash -c 'echo $0' 这使: 1 2 3 4 5 6 7 8 9 10 除了奇怪的行排序 – 尝试xargs -d” – n 3 bash -c’echo $0’不会打印出每行的第一个“元素”,即 $echo $0 1 4 7 而是将它们全部打印出来. 我要问的是,对于每个元素,如何将该行拆分为三个可以通过xargs引用的单独参数? 谢谢! 解决方法
你正朝着正确的方向前进
要声明一个数组: fa=('1 2 3' '4 5 6' '7 8 9') 实现你想要的: printf '%sn' "${fa[@]}" | xargs -n 3 sh -c 'echo call_my_command --arg1="$1" --arg2="$2" --arg3="$3"' argv0 这将回显你以下几行(相应传递给xargs的更改命令) call_my_command --arg1=1 --arg2=2 --arg3=3 call_my_command --arg1=4 --arg2=5 --arg3=6 call_my_command --arg1=7 --arg2=8 --arg3=9 如果我只是添加你的答案并稍微更改一下,我们将得到以下内容 printf '%sn' "${fa[@]}" | cut -d' ' -f1,3 | xargs -n 3 bash -c 'echo $0 $1 $2' 在xargs中注意缺少-d”,这个选项在某些版本的xargs中不可用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |