在bash中将多行逐行输入命令

时间:2018-10-03 14:25:43

标签: bash pipe echo cat heredoc

我正在$ echo <<EOF | cat > 1 > 2 > 3 > EOF 中尝试this

1

我期望输出三行(23Sub Test2() Dim sld As Slide Dim shp1 As Shape Dim shp2 As Shape Dim oshpR As ShapeRange Set sld = Application.ActiveWindow.View.Slide Set shp1 = ActivePresentation.Slides(1).Shapes.AddShape(msoShapeOval, 300, 100, 50, 50) Set shp2 = ActivePresentation.Slides(1).Shapes.AddShape(msoShapePie, 300, 100, 50, 50) 'Set oshpR = sld.Shapes.Range(Array(shp1.ZOrderPosition, shp2.ZOrderPosition)) ' msoTrue forces a new selection shp1.Select msoTrue ' msoFalse adds the shape to the current selection shp2.Select msoFalse CommandBars.ExecuteMso ("ObjectsGroup") End Sub ),但是我收到一个空行。我缺少什么(可能是一个简单的错误)?我知道可以以更简单的方式产生此特定输出。该示例应作为更广泛应用程序的蓝图。

2 个答案:

答案 0 :(得分:4)

echo不从标准输入中读取。也许您正在尝试:

$ cat <<EOF | cat
> 1
> 2
> 3
> EOF

当然可以缩短为:

$ cat <<EOF
> 1
> 2
> 3
> EOF

答案 1 :(得分:3)

echo不会从标准输入中读取,但不需要读取。您可以在字符串中嵌入换行符。

$ echo '1
> 2
> 3' | cat

您还可以使用printf在单独的行上输出每个单词:

$ printf '%s\n' 1 2 3
1
2
3

或者使用命令组将多个命令的输出作为一个整体进行管道传输,如果您的操作比一组简单的echo命令更为复杂,则非常有用,例如:

{
  echo 1
  echo 2
  echo 3
} | cat