Max*_*kyi 15 shell bash shell-script
我读过分号用于分隔程序:
$ echo 3; ls -la
Run Code Online (Sandbox Code Playgroud)
这是否意味着if,then和else是单独的程序?
$ if [ $VARIABLE == abcdef ] ; then echo yes ; else echo no ; fi
Run Code Online (Sandbox Code Playgroud)
这个问题与分号无关。
虽然当人们开始学习使用 shell 的基础知识时,这是一个公平的第一个近似值,但在“这是一个人如何运行程序”和“这是一个人如何在一行上一个接一个地运行多个程序”的级别上,事实并非如此。
初学者更难掌握但更正确的解释是shell语言是一种计算机语言。它有一个语法。该语法包含各种词汇元素,包括(除其他外)换行符、运算符、单词和保留字。
if、then、else和fi都是保留字。根据其语法,在解析提供给 shell 的输入时,它们具有特定的含义。类似地,是一个分隔符操作符。;
因此,shell 语言中的输入作为一个整体,是一个由另一个程序、解释器、shell解释的计算机程序。它的个别语法部分不是程序。shell 语言是一种为 shell 指定(其他)程序以运行的方式。
[不是 shell 语法中的特殊词法元素,例如运算符。这是一个普通的词,命名一个这样的程序名为[. 许多 shell 都有这个程序的内置版本,并结合到 shell 程序本身的代码中,但是您也可以在某个地方找到一个同名的外部程序,例如/bin/[或/usr/bin/[,shell以外的程序可以调用该程序。同样,]也不是一个特殊的 shell 词法元素。这是一个普通的词,成为[程序的参数。该[程序要求其最终参数在执行时为],然后忽略该参数。
您的问题中命名的另一个类似程序是echo. 同样,大多数 shell 都有这个程序的内置版本。但同样还有一个程序的外部版本,例如/bin/echo或/usr/bin/echo,用于调用 shell以外的程序。
您的问题中命名的第三个程序是ls. Shell 通常没有这个程序的内置版本,它是一个外部程序,可以在诸如/bin/ls或 之类的地方找到/usr/bin/ls。
对于 Bourne Again shell,您可以在 GNU Bourne Again shell 信息文档的Basic Shell Features中阅读更多相关信息。其他 shell 自然有不同的语法。该单一Unix规格描述语法,所有POSIX符合的炮弹(在他们的POSIX符合的模式)都应该坚持。
test. 公用事业。基本规范问题 7。开放组。IEEE 1003.1-2008。ISBN 1937218812。