linux局部变量特殊字符替换,shell变量替换(更具体)

一,SHELL本地变量:

本地变量就如同局部变量一样,只在本SHELL中起作用。它不会影响到其他SHELL中的变量。

格式:NAME=value

1,变量的调用:在变量前加$

$ echo $HOME

/home/hbwork

$ WEEK=Satur

$ echo Today is $WEEKday

Today is$echo Today is ${WEEK}day   //若变量和其他字符组成新的字,这时就必须给变量加上大括号{},以更加清楚的显示给shell,哪个是真正的变量,以实现字符串的合并等功能。

Today is Saturday

2,显示变量值

可以使用echo命令。需要注意的是,使用变量的时候必须在变量名前加上$符号。另外可以使用set命令,显示所有本地SHELL变量。包括SHELL中预定义了一些环境变量,且用户自己已经定义过的本地变量也会在其中显示。

3,Shell变量赋值从右到左进进行赋值(变量未赋值时,shell不报错,而是赋值为空!)

$ X=$Y Y=y

$ echo $X

y

$ Z=z Y=$Z

$ echo $Y

$

4,使用unset命令删除变量的赋值

$ Z=hello

$ echo $Z

hello

$ unset Z

$ echo $Z

$

5,有条件的命令替换 (测试变量是否已经赋值)

在Bourne Shell中可以使变量替换在特定条件下执行,即有条件的环境变量替换。 这种变量替换总是用大括号括起来的。

${variable: -value}变量替换时将使用命令行中定义的默认值,但变量的值并没有因此而改变。variable是一变量值,value是变量替换使用的默认值

例:$echo Hello $UNAME

结果显示:Hello

$echo Hello ${UNAME: -there}

结果显示:Hello there

$echo $UNAME

结果显示: (空)

$UNAME=John

$echo Hello ${UNAME: -there}

结果显示:Hello John

${variable:=value}不但使用默认值进行替换,而且将默认值赋给该变量。该形式在变量替换后同时把值value符给变量variable。

例:$echo Hello $UNAME

结果显示:Hello

$echo Hello ${UNAME:=there}

结果显示:Hello there

$echo $UNAME

结果显示:there

变量替换的值也可以是` `括起来的命令:

$USERDIR={$Mydir: -`pwd`}

${variable: +value}只有当变量已赋值时才用指定值替换,变量variable已赋值时,其值才用value替换,否则不进行任何替换。

例:$ERROPT=A

$echo ${ERROPT: +"Error tracking is acitive"}

结果显示:Error tracking is acitive

$ERROPT=

$echo ${ERROPT: +"Error tracking is acitive"}

结果显示: (空)

${variable:?message}使用错误检查的条件进行变量替换,当变量variable已设置时,正常替换。否则消息message将送到标准错误输出(若此替换出现在shell程序中,那么该程序将终止)。

例:$UNAME=

$echo $ {UNAME:?"UNAME HAS NOT BEEN SET"}

结果显示:UNAME HAS NOT BEEN SET

$UNAME=Stephanie

$echo $ {UNAME:?"UNAME HAS NOT BEEN SET"}

结果显示:Stephanie

当没有指定message时,shell将显示一条默认的消息,例如:

$UNAME=

$echo $ {UNAME:?}

结果显示:sh:UNAME:parameter null or not set