为什么在此函数定义和命令行中需要这些特定的分号?

为什么在此函数定义和命令行中需要这些特定的分号?

我正在准备 LPIC1,考试 102。这个问题出现在我面前,我完全茫然了。当我第一次参加测验时我就知道这一点,现在一个半月过去了,这一切在我的脑海中都变得模糊了。

什么是

   function a { echo $1; } ; a a b c   
输出?

A、a

B.abc

出租车

D.aabc

我尝试通过创建一个名为“script”的文件来重现此功能:

function a { echo $1;
};
a a b c

保存它,授予它执行权限,然后尝试一下:

$ bash script
a
$ 

所以正确答案是A,但是为什么呢?需要加个;after吗$1?第二个是做什么;用的?有人可以解释一下这个脚本的语法吗?

答案1

这些命令应该在命令行上执行,例如:
function a { echo $1; } ; a a b c

第二个分号将命令列表分为
function a { echo $1; }

a a b c

  • 第一个命令将创建一个名为“a”的函数,它将回显第一个位置参数。函数内的命令列表需要
    后面的分号echo $1来结束,因为没有换行符可以这样做。
    (另请参见:man bash-> 复合命令 -> { list; } )

  • 第二个命令a a b c将调用该函数(拳头 a)并将“ab c”作为位置参数传递给该函数。

由于该函数仅回显第一个位置参数,因此正确答案是“A.”。

答案2

a a b c翻译为command arg1 arg2 arg3

您要做的就是定义一个名为的函数a,该函数返回第一个参数 ( $1),该参数恰好是“a”。

分号是关于如何在相应的 shell 中使用大括号对命令进行分组的问题:

{ commandA ; commandB ; commandC ; ... ; commandN ; }

相关内容