我想用管道调用一个函数,并将所有标准输入读入一个变量。
我读到,正确的方法是使用 read
,或者 read -r
或 read -a
。然而,我在实践中遇到了很多问题(尤其是多行字符串)。
最后我选择了
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[@]}"
关于linux - 在 bash 函数中,如何将 stdin 放入变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32363887/