shell中变量扩展技巧及实例

SHELL中有一些变量扩展的技巧,做下归纳总结mark

一、取子字符串

规则1:${变量名:位置起点}

含义:由指定的位置起点开始,截取子字符串到字符串结束,起点由0开始

例1:

var="12345678"

echo ${var:5}

输出:678

-------------------------------

规则2:${变量名:位置起点:长度}
含义:由指定的位置起点开始,截取指定长度的字符串,起点由0开始

例2:

var="12345678"

echo${var:0:5}

输出:12345

-------------------------------

二、计算字符串长度

规则:${#变量名称}
含义:表示返回变量名称的字符串长度

例1:

var="12345678"

echo ${#var}

输出:8

-------------------------------

三、取传入的位置参数

命令行参数:$0表示命令本身,$1表示第一个参数,$2表示第二个参数,依此类推,$@表示所有的参数
位置参数有:$0$1$2$@

例1:$0表示命令本身

test.sh

#!/bin/bash
echo `basename $0`
echo `basename $0 .sh`

输出:

test.sh

test

-------------------------------

规则1:${@:起点}
含义:表示由起点开始,取得后面所有的位置参数

例2:

test.sh

!/bin/bash
echo ${@:1}

输出:1 2 3

-------------------------------

规则2:${@:起点:个数}
含义:表示由起点开始,取得指定个数的位置参数

例3:

test.sh

#!/bin/bash
echo ${@:1:1}
输出:1

-------------------------------

、对比样式

规则1:${变量#样式}
含义:表示由变量值的最左边开始与样式进行对比,删除"最短相符合的字符串"

例1:

var="12345678"

echo ${var#*3}

输出:45678

-------------------------------
规则2:${变量##样式}
含义:表示由变量值的最左边开始与样式进行对比,删除"最长相符合的字符串"

例2:

var="12341234"

echo ${var##*3}

输出:4

-------------------------------

规则3:${变量%样式}
含义:表示由变量值的最右边或最后边开始与样式进行对比,删除"最短相符的字符串"

例3:

var="12341234"

echo ${var%3*}

输出:123412

-------------------------------

规则4:${变量%%样式}
含义:表示由变量值的最右边或最后边开始与样式进行对比,删除"最长相符的字符串"

例4:

var="12341234"

echo ${var%%3*}

输出:12

-------------------------------

五、替换或删除部分字符串

规则1:${变量/样式/替换字符串}
含义:如果变量中有符合样式的字符串,则使用替换字符串替代,只替换第一个符合样式的字符串

例1:

var="12341234"

echo ${var/1234/1111}

输出:11111234

-------------------------------

规则2:${变量//样式/替换字符串}
含义:如果变量中有符合样式的字符串,则使用替换字符串替代,替换全部符合样式的字符串

例1:

var="12341234"

echo ${var//123/}

输出:44

-------------------------------

、要求样式在字符串开始或结尾

在对比样式时,在样式前加上"#"号,表示该样式要出现在变量值的开头才算符合
在对比样式时,在样式前加上"%"号,表示该样式要出现在变量值的结尾才算符合

例1:

var="12341234"

echo ${var/#1234/}

输出:1234

echo ${var/#234/}  #不开头

输出:12341234

echo ${var/%234/}

输出:12341

echo ${var/%2341/}

输出:12341234

-------------------------------

七.取变量名称列表

规则:${!开头字符串@}或${!开头字符串*}
含义:把所有以指定字符串开头的变量名列出,各变量之间按空格分开

例1:

var="12345678"

var2=1

echo ${!var*}

输出:

var var2

-------------------------------

八.默认值类用法

${parameter-word} 若parameter变量未定义,则扩展为word。
${parameter:-word} 若parameter变量未定义或为空,则扩展为word。

例1:

echo ${var1-111}

输出111

-------------------------------

例2:

var1=""

echo ${var1:-111}

输出111


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值