重定向不会显示为源脚本的参数

重定向不会显示为源脚本的参数

我的问题是当我编写 bash 脚本时无法打印到屏幕

. myBashScript.sh < text.txt

myBashScript.sh只是打印出来

echo $2

但它不是打印“text.txt”,而是显示“newLine”。据我所知,“<”是一个新行。

为什么$2不是text.txt

答案1

我假设你实际上正在打字

./myBashScript.sh < text.txt

带有正斜杠。

当您运行 时./myBashScript.sh < text.txt,您的交互式 shell 实际上会捕获< text.txt并将其解释为特殊指令 - 特别是,它会将您的命令行解释为意味着它应该使用连接到 text.txt 的标准输入来运行 myBashScript.sh。然后,您的 shell< text.txt从命令行中删除,然后将控制权传递给 myBashScript.sh。因此,就您的 shell 脚本而言,它接收零个参数,并且$2是空的。您的脚本简单地翻译为

echo

它打印一个换行符。

如果您想实际打印文件名,您应该考虑

#!/bin/sh
echo $1

然后你可以运行:

$ ./myShellScript text.txt
text.txt

另一方面,如果您想打印文件的内容,则应该使用 cat(1);你的 shell 脚本应该是

#!/bin/sh
cat $1

然后你可以运行:

$ ./myShellScript text.txt
Hello from text.txt, a file containing a bunch of test strings.

相关内容