(command1;command2;command3;...)将启动一个子shell。子shell可以访问父shell的变量,对父shell变量的修改只在子shell中有效;子shell中定义的变量是局部变量,不能从外部访问:#!/bin/bash#subshel??l.shecho"Weareoutsidethesubshel??l."echo"Subshel??llevelOUTSIDEsubshel??l=$BASH_SUBSHELL"echo;echoouter_variable=Outerglobal_variable=(echo"Weareinsidethesubshel??l."echo"Subshel??llevelINSIDEsubshel??l=$BASH_SUBSHELL"inner_variable=Innerglobal_variable="$inner_variable"echo"Frominsidesubshel??l,\"inner_variable\"=$inner_variable"echo"From在子外壳内,\"outer\"=$outer_variable")echo;echoecho"Weareoutsidethesubshel??l."echo"Subshel??llevelOUTSIDEsubshel??l=$BASH_SUBSHELL"echo"Frommainbodyofshell,\"inner_variable\"=$inner_variable"#$inner_variable将显示为空白(未初始化)#+因为变量在子shell中定义的是“局部变量”。echo"global_variable="$global_variable""echo#============================================================================#另外。..e选择“----------------”;echovar=41#全局变量。(let"var+=1";echo"\$varINSIDEsubshel??l=$var")#42echo"\$varOUTSIDEsubshel??l=$var"#41#子shell内的变量操作,甚至到全局变量#+不影响子shell外变量的值!exit0对子shell中目录的更改不会影响父shell:#!/bin/bash#allprofs.sh:打印所有用户配置文件。FILE=.bashrc#Filecontaininguserprofile.forhomein`awk-F:'{print$6}'/etc/passwd`do[-d"$home"]||continue#如果没有主目录,转到下一步。[-r“$家”]||continue#如果不可读,转到下一步。(cd$home;[-e$FILE]&&cat$FILE)done#当脚本终止时,不需要'cd'回到原始目录,#+因为'cd$home'发生在子shell.exit0程序可以在不同的subshel??l并行执行:#!/bin/bash#subshel??l.sh#后台运行保证并行执行(ping-c10127.0.0.1>/dev/null)&(ping-c20127.0.0。1>/dev/null)等同于:#ping-c10127.0.0.1>/dev/nullping-c20127.0.0.1>/dev/nullps可以发现这两个子命令都是当前脚本启动的subshel??l有不同的进程ID#直到子shell执行后才会执行后续命令(命令)
