将输入从文件重定向到程序

Nic*_*Yan 1 linux bash

我试图编写一个可以从文件中读取输入的程序,但被卡住了。我的程序是编:

#!/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: + : 语法错误:预期操作数(错误标记为“+”)

怎么了?谢谢!

ste*_*ver 5

您编写的不是一个从文件中读取输入的程序,而是一个以位置参数(又名命令行参数)的形式接收输入的程序。重定向操作符<将您的文件数据发送到程序的标准输入流(又名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)