堕络的小屋

  • 首页
  • 小工具
    • 百度
    • 武器库
    • 堕络的图床
    • 子域名爆破
    • 音乐搜索器
    • 手绘相片制作
    • 微博图片找博主
    • 社会主义核心价值观编码转换
  • 值得一看
    • 黄色
    • 天天优惠
    • 剑灵小助手
  • 系统
    • 高清壁纸
    • 全网优惠券
    • 付费音乐解锁
    • 自动签到框架
    • 我们的足迹系统
    • 网易云音乐签到打卡
    • 全自动网页生成系统
    • 自动采集活动线报
堕络哥哥
一个专业打杂的程序猿
  1. 首页
  2. Linux
  3. 正文

shell变量操作详解

2017年11月16日

一、变量初始化以及默认值设置

1.var与{var}:这两种写法本质上是一样的,但var有时候会产生混淆,而{var}一般不会,可以把变量和字符串组合起来使用,比如name={first}-on-{last}

2.{var-default}与{var:-default}:

(1)${var-default}:如果变量var没有被声明,那么就使用默认值,否则就是用var初始化的值

例子1:

echo ${a-default} #结果为default

 

例子2:

a=

echo ${a-default} #结果为空

 

例子3:

a="test"

echo ${a-default} #结果为test

 

(2)${var:-default}:如果变量var没有被声明或者已经声明,但是赋值为空,那么就使用默认值,否则就使用var初始化的值

例子1:

echo ${a:-default} #结果为default

 

例子2:

a=

echo ${a:-default} #结果为default

 

例子3:

a="test"

echo ${a:-default} #结果为test

(另外的写法:{parameter=default}与{parameter:=default}与上述的两个是一样的)

 

3.{var+alt_value}与{var:+alt_value}

(1)${var+alt_value}:如果变量var被声明了, 无论var的值为空或者var初始化为一个值,都使用alt_value, 如果没有声明就为空.

例子1:

echo ${a+alt_value} #结果为空

 

例子2:

a=

echo ${a+alt_value} #结果为alt_value

 

例子3:

a="test"

echo ${a+alt_value} #结果为alt_value

 

(2)${var:+alt_value}:如果变量var被初始化为一个非空的值, 那么就使用alt_value, 如果没有被声明或者已声明但初始化为空值就为空

例子1:

echo ${var:+alt_value} #结果为空

 

例子2:

a=

echo ${var:+alt_value} #结果为空

 

例子3:

a="test"

echo ${var:+alt_value} #结果为alt_value

 

4.{parameter?err_msg}与{parameter:?err_msg}

(1)${var?err_msg}:如果var已经被声明,那么就使用设置的值,否则打印err_msg错误消息。

例子1:

echo ${var?err_msg} #结果为报错退出,打印出错误信息:err_msg

 

例子2:

a=

echo ${var?err_msg} #结果为空

 

例子3:

a="test"

echo ${var?err_msg} #结果为test

 

(2)${parameter:?err_msg}:如果parameter已经被初始化为一个非空的值, 那么就使用设置的值, 否则打印err_msg错误消息。

例子1:

echo ${var:?err_msg} #结果为报错退出,打印出错误信息:err_msg

 

例子2:

a=

echo ${var:?err_msg} #结果为报错退出,打印出错误信息:err_msg

 

例子3:

a="test"

echo ${var:?err_msg} #结果为test

二、变量长度/子串删除(此点与shell字符串操作的“削除指定子串”项一样)

三、变量子串替换(位置从1开始)

1.${var:pos}:删除变量pos位置之前的字符。

2.${var:pos:len}:从位置pos开始, 截取变量的len个字符。

3.${var/Pattern/Replacement}:使用Replacement来替换变量var中第一个匹配Pattern的字符串。

4.${var//Pattern/Replacement}:所有在变量var匹配Pattern的字符串, 都会被替换为Replacement。5.

5.${var/#Pattern/Replacement}:如果变量var从开头开始的字符能匹配Pattern, 那么就使用Replacement来替换匹配到Pattern的字符串,否则保存var不变

6.${var/%Pattern/Replacement}:如果变量var的后缀匹配Pattern, 那么就使用Replacement来替换匹配到Pattern的字符串

例子1:

a="abcdefg"

echo ${a/#abc/1} #结果为1defg

 

例子2:

a="abcdefg"

echo ${a/#bc/1} #没有匹配开头字符a,所以结果为abcdefg

 

例子3:

a="abcdefg"

echo ${a/%efg/1} #结果为abcd1

 

例子4:

a="abcdefg"

echo ${a/%ef/1} #没有匹配结尾字符g,所以结果为abcdefg

7.{!varprefix*}与{!varprefix@} =》 匹配所有之前声明过的, 并且以varprefix开头的变量

例子:

test_a="abcdefg"

test_b="teyfh"

test_c="sdsrer"

var=${!test*}

echo "var=${var}" #结果为var=test_a test_b test_c

四、指定变量的类型:使用declare或者typeset(这两个是完全一样的内建命令,允许指定变量的具体类型)

1.“-r”:指定变量是只读的

2.“-i”:指定变量的类型是整型

3.“-a”:指定变量的类型是数组

4.“-f”:指定变量的类型是函数(如果直接执行declare -f,就会列出前面所定义的函数)

5.“-x”:声明一个变量, 并作为这个脚本的环境变量被导出

五、变量的间接引用

例子:

a=b

b=c

eval a=\$$a #间接引用

或者使用a=${!a}

echo $a #结果为c

标签: Linux
最后更新:2017年11月16日

chenxing

'

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2024 堕络的小屋. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang