Linux Shell 命令行:Shell 命令行嵌套
你可在命令行中嵌入新的外壳程序进程。意思是除了命令行本身进程外可以执行新的外壳进程。可使用变量证明命令行中新外壳程序进程的生成。
语法:
echo $<variable>
echo $(value)
echo $<variable>
举例:
$ echo $var
$ echo $(var=Hyii ; echo $var)
$ echo $var
见如上截图所示,第2个命令,使用 echo 显示命令展开 $(...)
的内容,而命令展开中的命令 var=Hyii; echo $var 运行在新建的外壳程序子进程中,其在子进程中给 $var 所赋值,随着命令行结束,新建的子进程退出。并不能被外部的外壳程序进程保留。因此,第3个命令,显示 $var 变量的值是不存在的。
反引号(`)
可以使用反引号(`)命令展开代替 $(...) 命令展开。反引号(`)命令展开不可嵌套。
举例:
$ echo `cd Desktop; ls *.txt | grep file`
见如上截图所示,使用反引号(`)命令展开将 cd,ls,grep 命令嵌入 echo 命令行中。
注意: 其中 grep 命令用于模式匹配找到文件,它的使用后续指南会讲解。
反引号(`)和单引号(')的不同
反引号(`)和单引号(') 常常被混淆,但实际上它们代表完全不同的控制含义。
让我们通过一个例子了解它。
举例:
$ echo `var=Hii; echo $var`
$ echo 'var=Hii; echo $var'
见如上截图所示,反引号命令展开最终显示 $var 变量的值。而单引号把其括住的内容原样输出。
外壳程序选项
介绍两个外壳程序内置的 set 选项。默认,bash 外壳程序将未声明或未赋值的变量做为未绑定变量(变量无值)。
set -u 选项,使外壳程序对未定义变量的使用做为错误报警。
set +u 选项,静默不输出。
推荐文章: