linux - 在 bash 函数中,如何将 stdin 放入变量中

标签 linux bash shell

我想用管道调用一个函数,并将所有标准输入读入一个变量。

我读到,正确的方法是使用 read,或者 read -rread -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/

相关文章:

linux - 如何自动将代码从本地存储库推送到远程 bitbucket 存储库?

java - 在集群上启动和停止 apache flume 代理

linux - 在 Linux 中物理连续与几乎不连续

c - getc 是宏还是函数?

bash - 如何从bash脚本启动Docker容器?

bash - 在输出被重定向的脚本中重定向命令的输出

linux - Bash脚本不返回任何东西,使用位置参数

winapi - 如何保护自己免受 shell DLL 加载到进程中的影响?

php - 如何从 (PHP) shell 脚本中取回数据

linux - 这个shell脚本有什么错误