我正在$ echo <<EOF | cat
> 1
> 2
> 3
> EOF
中尝试this:
1
我期望输出三行(2
,3
,Sub 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
),但是我收到一个空行。我缺少什么(可能是一个简单的错误)?我知道可以以更简单的方式产生此特定输出。该示例应作为更广泛应用程序的蓝图。
答案 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