尝试循环访问文件时出现不明确的重定向错误



我有这个脚本:

#!/bin/bash
PATH=${PATH[*]}:.
#filename: testScript
while read line; do
    #.
    #.
    #.
done < "$1"

而这个文本文件(称为文件.txt):

I am a proud sentence.

当我这样做时:

chmod +x ./testScript.txt
./testScript.txt < ./file.txt > output.txt

我明白这个:

./testScript.txt: line 11: $1: ambiguous redirect

但是,如果我在testScript中用 file.txt 替换 1 美元,它就可以正常工作。
如何让它将 $1 视为我发送的文件名?(文件.txt)

$1

定义,因为您尚未将参数传递给脚本;您已重定向其输入。将脚本调用为

./testscript.txt ./file.txt > output.txt

或者,更好的是,让您的脚本从标准输入中读取:

while read line; do
    ...
done

当你调用./testScript < ./file.txt > output.txt时,你的while循环将从它的标准输入中读取,该输入继承自./testScript,从./file.txt读取。

< ./file.txt替换为 ./file.txt

按如下方式修改你的 while 循环,

while read line; do
.
.
.
done < "${1:-/dev/stdin}"

${1:-...} 如果定义$1,则使用自己的进程的标准输入的文件名。

相关内容

  • 没有找到相关文章

最新更新