可以将一条命令或者某个脚本的执行结果赋给变量,有两种方法。
一种方法是,用反引号将命令括起来,格式为:
另一种方法是,用美元符和小括号将命令括起来,格式为:
例如,将命令date的运行结果赋给变量A和B:
也可以将命令的引用直接放在另一条命令里面:
输出内容为多行的命令,其输出也可以赋给变量。例如,ls-l命令的输出一般是多行的,将它的输出赋给a:
运行echo $a时,ls -l命令结果并没有像预期的那样多行显示,而是在一行上显示了。这是因为命令echo $a将换行符丢掉了。将变量用双引号括起来,可以保留换行符:
现在可以顺便再解释一下第3章提到的“黑洞”的作用。例如,运行a=`script_1.sh`可以将脚本script_1.sh的执行结果赋给变量a。在脚本script_1.sh当中,可能调用了很多命令甚至调用了很多别的脚本,这些命令和脚本很可能大多有正常的输出和异常(错误信息)的输出。假设script_1.sh一定有执行结果,而且只需要用变量a记录这个结果,并不关心中间的输出(包括正常的输出和异常的输出),那么,编写脚本script_1.sh的时候,脚本当中某些命令的输出就可以重定向到“黑洞”/dev/null。(www.xing528.com)
反引号和$()的作用相同,但从长远的发展看,$()会用得越来越多。老脚本当中反引号用得多一些,新脚本当中$()用得多一些。$()的优点是容易嵌套,看下面的例子:
如果将上面命令中的$()换为反引号,再试试:
结果不是期望的那样,因为,系统会将`echo`date``的前面两个反引号配对,后面两个配对。这样,前面两个反引号之间为一个空echo命令,后面两个反引号之间为一个纯粹的空命令,所以,命令time=`echo`date``就相当于time=date,把字符串date赋给了time。
可以将反引号或者$()放在单双引号之间。放在单引号之间时,原样显示出来,反引号之间的命令或者$()中的命令不执行:
放在双引号之间时,反引号之间的命令或者$()中的命令被执行:
放在双引号之间时,如果希望原样显示出来,需要在反引号和美元符左边加反斜杠。加反斜杠就可以去除反引号和美元符的作用,让其原样显示出来:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。