我试图编写一个可以从文件中读取输入的程序,但被卡住了。我的程序是编:
#!/bin/bash
num=$(($1 + $2))
echo $num
Run Code Online (Sandbox Code Playgroud)
我的输入 test.in:
1
1
Run Code Online (Sandbox Code Playgroud)
我用了
./prog < test1.in
Run Code Online (Sandbox Code Playgroud)
但收到错误消息
./prog: line 2: + : 语法错误:预期操作数(错误标记为“+”)
怎么了?谢谢!
您编写的不是一个从文件中读取输入的程序,而是一个以位置参数(又名命令行参数)的形式接收输入的程序。重定向操作符<将您的文件数据发送到程序的标准输入流(又名stdin) - 您的程序会忽略它。
最简单的是,要从标准输入中读取每个值一行,您可以将程序更改为
#!/bin/bash
read a
read b
num=$((a+b))
echo $num
Run Code Online (Sandbox Code Playgroud)
现在,当您stdin从测试文件重定向时,结果应该是
$ ./newprog < test1.in
2
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用该xargs实用程序读取文件数据并将其内容作为参数传递给您的程序
$ xargs -a test1.in ./prog
2
Run Code Online (Sandbox Code Playgroud)