在bash函数中,如何将stdinjoinvariables

我想用pipe道调用一个函数,并将所有stdin读入一个variables。

我读到正确的方法是read ,或者read -rread -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[@]}"