我的问题是当我编写 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.