[
的可执行文件。它做了什么?关于上周的家庭作业的一个问题是"哪些可执行程序的名称只有一个字符长,他们做了什么?"
我运行了命令:find $PATH{1,2,3,4,5,6,7} -executable -name "?"
(我将PATH的每个部分保存到名为PATH1,PATH2,PATH3等的变量中)
部分输出是:
/usr/bin/X
/usr/bin/w
/usr/bin/[
我之前使用过w
,我知道它的作用。我不知道X
做了什么,并且没有手册页,所以我运行了命令。在输出中,它告诉我去" http://wiki.x.org"一切都很好。
但是[
没有手册页,我甚至无法弄清楚如何运行[
命令!
$ /usr/bin/[
/usr/bin/[: missing ']'
$ source /usr/bin/[
-bash: source: /usr/bin/[: cannot execute binary file
我用一个大的" ???"来完成作业。我的[
条目旁边,但我仍然想知道它的作用。或者,如果它甚至是一个实际的可执行文件。
答案 0 :(得分:2)
[
基本上是语法糖,test
的紧急备份版本,在if语句中看起来更好。在bash中你可以(并且可能应该)实际上总是使用[[ ]]
代替,它由解释器直接解析并且不会产生新的进程。您还应该仔细阅读bash手册页并理解进行数学评估的(( ))
。
答案 1 :(得分:1)
您收到的错误消息实际上来自[
,而不是shell。那就是你确实运行了[
并且[
抱怨它想要在其参数列表中有一个]
。
因此,运行[
的最简单方法是[ ]
,它不执行任何操作并返回false。
[
做的是评估一个条件。它经常用在if语句中:
if [ some-condition ]
then
do_something
fi
这看起来好像括号是if
语法的一部分,但它们并非如此。它只是使用参数[
和some-condition
调用程序]
。
答案 2 :(得分:0)
[
是test
https://www.gnu.org/software/bash/manual/html_node/Bash-Conditional-Expressions.html
测试 - 检查文件类型并比较值
https://linux.die.net/man/1/test
您获得的错误missing ]
是因为此测试的同义词执行为
[ test_expression ]
,如果没有结束括号]