Shell: 变量替换 命令替换 & ~波浪号替换的区别

1 篇文章 0 订阅
1 篇文章 0 订阅

测试环境: RedHat 2.6.18-128.el5

 

在shell中有三种替换功能:

变量替换,命令替换和波浪号替换

替换的目的是加快命令行输入和提高shell的灵活性(废话)。

 

变量替换:

每个被定义的变量都有一个值(value)与其相关。当在变量名前面加一个美元符号($)时,shell会用这个变量的值(value)替换这个参数。此过程就是变量替换。

可以使用set命令查看所有的用户变量:

[ghl@localhost work]$ set
BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="3" [1]="2" [2]="25" [3]="1" [4]="release" [5]="i686-redhat-linux-gnu")
BASH_VERSION='3.2.25(1)-release'
COLORS=/etc/DIR_COLORS
COLUMNS=80
未完全粘贴......

[ghl@localhost work]$ var1=value1[ghl@localhost work]$ set | grep var1var1=value1[ghl@localhost work]$ echo the value of var1 is$var1the value of var1 isvalue1

推荐用大括号{}
[ghl@localhost work]$ echo the value of var1 id ${var1}
the value of var1 id value1[ghl@localhost work]$ pwd
/home/ghl/work
[ghl@localhost work]$ cat f2
Mon Mar 26 14:30:18 CST 2012
[ghl@localhost work]$ file_name1=/home/ghl/work/f2
[ghl@localhost work]$ cat ${file_name1}
Mon Mar 26 14:30:18 CST 2012


 

命令替换:

命令替换就是在同一个命令行中用一个命令的输出结果替换该命令。标准语法(POSIX)是$(command),但是在Bourne shell中也支持重音键 `command` 

说起来有点绕,看下面的例子吧:

[ghl@localhost work]$ pwd1=$(pwd)
[ghl@localhost work]$ pwd2=`pwd`
[ghl@localhost work]$ echo $pwd1
/home/ghl/work
[ghl@localhost work]$ echo $pwd2
/home/ghl/work
[ghl@localhost work]$ set | grep pwd
pwd1=/home/ghl/work
pwd2=/home/ghl/work


注意下面例子中单引号和双引号(在这里就不说了)

[ghl@localhost work]$ echo "current working folder is $(pwd)"
current working folder is /home/ghl/work
[ghl@localhost work]$ echo "current working folder is `pwd`"
current working folder is /home/ghl/work
[ghl@localhost work]$ echo 'current working folder is $(pwd)'
current working folder is $(pwd)
[ghl@localhost work]$ echo 'current working folder is `pwd`'
current working folder is `pwd`


 

波浪号替换:

以波浪号(~)开头的脚本,波浪号会被替换。具体规则如下:

1. 单独的波浪号(~),用HOME变量的值替换;

2. 波浪号后紧跟一个加号(~+),用PWD变量的值替换;--  注意是变量,而不是命令

3. 波浪号后紧跟一个减号(~-),用OLDPWD变量的值替换; -- OLDPWD为cd命令之前的工作目录;

4. 波浪号后面紧接着几个字符,然后接着一个 / ,shell会核对这几个字符是否与某个系统的用户名匹配,如匹配,那么用 /home 替换波浪号;

[ghl@localhost work]$ set | grep -i pwd
OLDPWD=/tmp
PWD=/home/ghl/work
pwd1=/home/ghl/work
pwd2=/home/ghl/work

[ghl@localhost work]$ echo ~
/home/ghl
[ghl@localhost work]$ echo ~+
/home/ghl/work
[ghl@localhost work]$ echo ~-
/tmp

[ghl@localhost work]$ echo ~ghl/
/home/ghl/
[ghl@localhost work]$ echo ~ghl1/
/home/ghl1/
[ghl@localhost work]$ echo ~root/
/root/


-- 注意这个只有root用户是不一样的

结论或者区别如下:

1. 变量替换时变量值替换变量名;命令替换时命令的输出替换命令;波浪号替换是一种特殊的变量替换(只是语法形式不一样,不用加$符号和大括号);

2. 变量替换的语法是 ${parname} ,命令替换的语法形式是$(parname) 和 `parname`.

3. 变量替换和命令替换在单引号表达式里面要被去转义(失效)。

 

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值