我有这个脚本:
#!/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
,则使用自己的进程的标准输入的文件名。