我有这个脚本:
#!/bin/bash
PATH=${PATH[*]}:.
#filename: testScript
while read line; do
#.
#.
#.
done < "$1"
这个文本文件(称为file.txt):
I am a proud sentence.
当我这样做时:
chmod +x ./testScript.txt
./testScript.txt < ./file.txt > output.txt
我明白了:
./testScript.txt: line 11: $1: ambiguous redirect
但是,如果我在file.txt
中使用testScript
替换$ 1,那就可以了。
如何将$ 1作为我发送的文件名? (file.txt的)
答案 0 :(得分:1)
将< ./file.txt
替换为./file.txt
。
答案 1 :(得分:1)
$1
未定义,因为您尚未向您的脚本传递参数;您已重定向其输入。将您的脚本调用为
./testscript.txt ./file.txt > output.txt
或者,更好的是,让您的脚本从标准输入中读取:
while read line; do
...
done
当您致电./testScript < ./file.txt > output.txt
时,您的while
循环将从其标准输入读取,该输入继承自./testScript
,./file.txt
。
答案 2 :(得分:1)
修改你的while循环,
while read line; do
.
.
.
done < "${1:-/dev/stdin}"
${1:-...}
如果定义了$1
,则使用自己进程的标准输入的文件名。