【问题标题】:Piping echo output to another echo管道回声输出到另一个回声
【发布时间】:2021-06-12 18:49:59
【问题描述】:

有没有办法将 echo 输出通过管道传输到另一个 echo 并在不使用变量的情况下对其进行切片?

例如: 这可以在不使用管道的情况下完成

var="heyyy hello there HRU?"
echo "${var:11}"

但我们在使用管道时不使用 var...

echo "heyyy hello there HRU?" | echo "${?:11}"

如何捕获上一个命令的输出并像我们使用变量一样对其进行切片?有什么办法吗?

我知道可以使用 “sed”、“awk”、“cut” 等多个命令来完成,但我只是想知道是否有任何方法可以使用 echo .

【问题讨论】:

  • echo 不读取标准输入。
  • XY 问题是询问您尝试的解决方案,而不是您的实际问题。
  • 不,没有办法。您可以创建自己的“回声”,但这不再是“回声”。

标签: bash shell echo


【解决方案1】:

在变量中捕获它。

echo "heyyy hello there HRU?" | { var=$(cat); echo "${var:11}"; }

【讨论】:

  • 不使用变量有什么办法吗?? @KamilCuk
  • any way to do without 究竟是做什么的?至于不带变量做${var:11}:不,这叫variable扩展。你已经知道了:I know it can be done using multiple commands like "sed", "awk", "cut"
【解决方案2】:

echo 不使用stdin !。它可以打印给它的参数。所以你正在尝试的东西短期内不会奏效。

echo -- 将参数写入标准输出

参考手册页https://man7.org/linux/man-pages/man1/echo.1p.html

STDIN
       Not used.

【讨论】:

  • 你的意思是我们不能使用 echo 命令来捕获之前的输出?? @Akshay Hegde
  • 是的,这不捕获标准输入,请阅读上面给出的手册页链接。
  • 也许 echo 命令没有捕获标准输入。但总有办法捕捉它并将其作为参数传递给它,这就是我一直试图找出的。无论如何谢谢你:D @Akshay Hegde
  • @Raj 你的意思是这样的 echo "heyyy hello there HRU?" | echo "$(</dev/stdin)" 再次这是变量 BTW
  • @Raj FYI ${parameter:offset},这里的参数可以是shell参数或数组