我想用pipe道调用一个函数,并将所有stdin读入一个variables。
我读到正确的方法是read
,或者read -r
或read -a
。 但是,我在实践中遇到了很多问题(特别是多行string)。
最后,我决定了
function example () { local input=$(cat) ... }
input=$(cat)
是一个非常好的方式来捕获标准输入,如果你真的需要。 需要注意的一点是,命令替换会去掉所有尾随的换行符,所以如果要确保捕获所有换行符,则需要确保除换行符以外的内容是最后读取的。
input=$(cat; echo x) input=${input%x} # Strip the trailing x
在bash
4或更高版本中的另一个选择是使用readarray
命令,该命令将使用标准输入的每一行填充一个数组,每个元素一行,如果需要,您可以将其重新加入单个变量。
readarray foo printf -v foo "%s" "${foo[@]}"