小编Bre*_*lad的帖子

“/bin/[”究竟是如何工作的?

我总是惊讶于文件夹中/bin有一个[程序。

这就是我们在做这样的事情时所说的:if [ something ]

通过[在 shell 中显式调用程序,它会要求提供相应的],并且当我提供右括号时,无论我在括号之间插入什么,它似乎什么都不做。

毋庸置疑,获得有关程序帮助的通常方法是行不通的,即既不可行man [也不行[ --help

shell test

51
推荐指数
3
解决办法
9397
查看次数

用纯 Bash 编写的程序能有多复杂?

经过一些非常快速的研究,似乎 Bash是一种图灵完备的语言

我想知道,为什么 Bash 几乎只用于编写相对简单的脚本?由于 Linux 附带了 Bash shell,因此您可以像其他流行的计算机语言一样运行 shell 脚本,而无需任何外部解释器或编译器。这是一个巨大的优势,在某些情况下可以弥补语言本身的平庸。

那么,此类程序的复杂程度是否有限制?纯 Bash 是用来写复杂程序的吗?是否可以在纯 Bash 中编写文件压缩器/解压缩器?编译器?一个简单的视频游戏?

是否仅仅因为只有非常有限的调试工具而很少使用?

shell bash programming

23
推荐指数
3
解决办法
1万
查看次数

在 bash 中回显到 stdout 或文件的优雅解决方案

我有一个 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为此目的使用,但我认为它也很丑陋,不是吗?

bash shell-script stdout

4
推荐指数
2
解决办法
2万
查看次数

标签 统计

bash ×2

shell ×2

programming ×1

shell-script ×1

stdout ×1

test ×1