如何使用xargs将Shell数组作为命令行参数传递给目标脚本
问题根因
xargs的核心作用是将管道接收的输入内容转换为后续命令的位置参数,而非将内容作为标准输入传递给后续命令。
原有写法中script2.sh的逻辑是循环读取标准输入的每行内容,使用xargs后,数组所有元素都被转为script2.sh的启动入参,script2.sh的标准输入没有内容,自然不会产生输出。
正确实现方案
调整逻辑说明
- 发送侧(script1.sh):使用
\0空字符作为数组元素的输出分隔符,配合xargs的-0参数识别分隔符,避免数组元素包含空格、换行等特殊字符时出现解析错误 - 接收侧(script2.sh):不再读取标准输入,改为遍历传入的所有位置参数即可
完整代码
script1.sh
#!/bin/bash this_chunk=(1 2 3 4) printf "%s\0" "${this_chunk[@]}" | xargs -0 ./script2.sh
script2.sh
#!/bin/bash # 如果需要和原有输出格式一致,将echo改为 echo "--$i" 即可 for i in "${@}"; do echo "$i" done
内容的提问来源于stack exchange,提问作者Botond
相关产品推荐
相关产品推荐

