bash - 如何在 Bash 脚本中执行标准重定向?
问题描述
我已经编写了一个 bash 脚本,可以通过您键入的命令行:bash bash_file.sh input_file.txt output_file.txt
这非常好。我已经让它按照它应该的方式工作,它从 input_file 读取行Hello 10
并将单词输出Hello
10 次到output_file.txt
. 这么多工作。现在,我不知道如何让 bash 脚本处理这种类型的命令行:bash bash_file.sh < input_file.txt > output_file.txt
. 它抛出了各种各样的错误,我什至无法开始找出解决方案——如果有人有解决方案或者可以为我指出一个很好的解决方案的方向。
下面的代码适用于以下命令行命令bash bash_file.sh input_file.txt output_file.txt
。
string_word=$(<$1)
IFS=' '
read -ra ADDR <<< "$string_word"
num="${ARR[2]}"
str="${ARR[0]} ${ARR[1]}"
while [[ $num -ne 0 ]]; do
echo $num
echo "$str" >> $2
num=$(( num - 1 ))
done
现在,我正在尝试对其进行修改,以便以下命令行命令对其起作用:bash bash_file.sh < input_file.txt > output_file.txt
解决方案
忽略脚本中的错误,例如您如何阅读ADDR
但引用ARR
,您通常可以在read
没有源的情况下使用从标准输入读取,并且echo
无需重定向到写入标准错误:
read -ra ARR
num="${ARR[1]}"
str="${ARR[0]}"
while [[ $num -ne 0 ]]; do
echo "$str"
num=$(( num - 1 ))
done
它是这样工作的:
$ echo 'Hello 10' > input_file.txt
$ bash bash_file.sh < input_file.txt > output_file.txt
$ cat output_file.txt
Hello
Hello
Hello
[...]
你也不需要重定向:你现在可以运行它bash bash_file.sh
,Hello 10
在键盘上输入,然后Hello
在屏幕上打印 s,因为当你不重定向时,这是默认的标准输入和标准输出。
推荐阅读
- python - 如何使用整个单词作为键在python中翻译
- debugging - 如何在 OutSystems 中同时调试多个模块
- flutter - 为什么Text Widget的renderObject的高度大小大于fontSize
- regex - 使用正则表达式过滤正则表达式结果时遇到问题
- python-3.x - 试图找到日期范围之间的缺失日期
- swiftui - 如何使用 SwiftUI 绑定来创建 var?
- powerbi - 在滑块界面将默认开始日期更改为逻辑值的方法?
- c# - 在 Xamarin.Forms 中使用模拟时钟上的指针设置时间
- python - 使用 python 的统计工作室
- windows - Set-Culture 设置 NumberDecimalSeparator