我总是惊讶于文件夹中/bin
有一个[
程序。
这就是我们在做这样的事情时所说的:if [ something ]
?
通过[
在 shell 中显式调用程序,它会要求提供相应的]
,并且当我提供右括号时,无论我在括号之间插入什么,它似乎什么都不做。
毋庸置疑,获得有关程序帮助的通常方法是行不通的,即既不可行man [
也不行[ --help
。
经过一些非常快速的研究,似乎 Bash是一种图灵完备的语言。
我想知道,为什么 Bash 几乎只用于编写相对简单的脚本?由于 Linux 附带了 Bash shell,因此您可以像其他流行的计算机语言一样运行 shell 脚本,而无需任何外部解释器或编译器。这是一个巨大的优势,在某些情况下可以弥补语言本身的平庸。
那么,此类程序的复杂程度是否有限制?纯 Bash 是用来写复杂程序的吗?是否可以在纯 Bash 中编写文件压缩器/解压缩器?编译器?一个简单的视频游戏?
是否仅仅因为只有非常有限的调试工具而很少使用?
我有一个 bash 应用程序正在产生一些结果,我想将结果回显stdout
到用户选择的文件中。因为我还向屏幕回显了其他交互式消息,所以要求用户>
在他想将结果回显到文件时明确使用重定向不是一个选项 (*),因为这些消息也会出现在文件中。
现在我有一个解决方案,但它很难看。
if [ -z $outfile ]
then
echo "$outbuf" # Write output buffer to the screen (stdout)
else
echo "$outbuf" > $outfile # Write output buffer to file
fi
Run Code Online (Sandbox Code Playgroud)
我试图让变量$outfile
等于stdout
, to&1
或者其他东西,但它只会写入具有该名称的文件,而不是实际写入标准输出。有没有更优雅的解决方案?
(*) 我可以作弊并stderr
为此目的使用,但我认为它也很丑陋,不是吗?