将shell指令结果保存到变量中的两种方法

shell指令结果保存到变量中

1. 方法一: 反引号

#!/bin/bash

a=`ls -l; pwd; date;`
echo "$a"

b=`ls -l
 pwd
 date`
echo "$b"

2. 方法二:使用 $()

#!/bin/bash

a=$(ls -l)
echo "$a"

3. 注意事项

  1. 默认情况只会将标准输出保存到变量中,如果需要加异常结果也保存到变量,需要加 2>&1
#!/bin/bash

a=$(xxx 2>&1)
echo "$a"
  1. echo回显变量的时候需要加双引号"" ,作用是保留换行符号,否则会用空格代替换行,丢失换行。
  2. 需要再次操作变量,可以使用 echo "$a"来读取变量
  3. 反引号和单引号非常相似,容易产生混淆,两种方式相比较而言更推荐使用$()方式。
#!/bin/bash
LSL=`ls -l`
echo $LSL  #不使用双引号包围
echo "--------------------------"  #输出分隔符
echo "$LSL"  #使用引号包围

运行结果

total 8 drwxr-xr-x. 2 root root 21 71 2016 abc -rw-rw-r--. 1 mozhiyan mozhiyan 147 1031 10:29 demo.sh -rw-rw-r--. 1 mozhiyan mozhiyan 35 1031 10:20 demo.sh~
--------------------------
total 8
drwxr-xr-x. 2 root     root      21 71 2016 abc
-rw-rw-r--. 1 mozhiyan mozhiyan 147 1031 10:29 demo.sh
-rw-rw-r--. 1 mozhiyan mozhiyan  35 1031 10:20 demo.sh~

所以,为了防止出现格式混乱的情况,我建议在输出变量时加上双引号。

4. 再谈反引号和 $()

原则上讲,上面提到的两种变量替换的形式是等价的,可以随意使用;但是,反引号毕竟看起来像单引号,有时候会对查看代码造成困扰,而使用 $() 就相对清晰,能有效避免这种混乱。而且有些情况必须使用 ( ) : (): ()() 支持嵌套,反引号不行。

下面的例子演示了使用计算 ls 命令列出的第一个文件的行数,这里使用了两层嵌套。

[c.biancheng.net]$ Fir_File_Lines=$(wc -l $(ls | sed -n '1p'))
[c.biancheng.net]$ echo "$Fir_File_Lines"
36 anaconda-ks.cfg

要注意的是,$() 仅在 Bash Shell 中有效,而反引号可在多种 Shell 中使用。所以这两种命令替换的方式各有特点,究竟选用哪种方式全看个人需求。

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值