【Linux】实用的参数扩展,如取变量值的部分字段

参数,即我们平常在shell里面定义的变量,一般可以直接使用$符号进行引用

[root@localhost /home/Sudley]#test=1-2-3
[root@localhost /home/Sudley]#echo $test
1-2-3
[root@localhost /home/Sudley]#

下面介绍一些实用的参数扩展

参数扩展描述
${param:-default}如果param为空,即参数未赋值,则将参数赋值为default
${param:?default}如果param为空,则返回param:default并终止命令
${param:+default}如果param为非空,则将参数赋值为default
${#param}获取参数的长度
${param%word}由参数尾部开始截掉满足word匹配格式的最短字段 ,返回剩下的部分
${param%%word}由参数尾部开始截掉满足word匹配格式的最长字段 ,返回剩下的部分
${param#word}由参数头部开始截掉满足word匹配格式的最短字段 ,返回剩下的部分
${param##word}由参数头部开始截掉满足word匹配格式的最长字段 ,返回剩下的部分
${param:n:m}由参数段左边第n个字符开始截取m个字符并返回 ,m为空则返回由n到最后的字符

实例演示

[root@localhost /home/Sudley]#cat test.sh
#!/bin/bash

tt=""
echo ${tt:-example}

tt="1-2-3-4"
echo ${tt:-example}

echo ${#tt}
echo ${tt%-*}
echo ${tt%%-*}
echo ${tt#*-}
echo ${tt##*-}
[root@localhost /home/Sudley]#sh test.sh
example
1-2-3-4
7
1-2-3
1
2-3-4
4
[root@localhost /home/Sudley]#
[root@localhost /home/Sudley]#rr=
[root@localhost /home/Sudley]#echo ${rr:?qq};echo $?
-bash: rr: qq
[root@localhost /home/Sudley]#echo $?
1
[root@localhost /home/Sudley]#rr=111
[root@localhost /home/Sudley]#echo ${rr:?qq};echo $?
111
0
[root@localhost /home/Sudley]#echo ${rr:+qq}
qq
[root@localhost /home/Sudley]#
[root@localhost /home/Sudley]#echo $TEST
1234
[root@localhost /home/Sudley]#echo ${TEST:0:2}
12
[root@localhost /home/Sudley]#echo ${TEST:2:1}
3
[root@localhost /home/Sudley]#echo ${TEST:2}
34

Tips:在这里使用${}把参数名称包裹起来了,这样起到界定参数名称范围的作用

[root@localhost /home/Sudley]#r=123
[root@localhost /home/Sudley]#echo $r
123
[root@localhost /home/Sudley]#echo $rr

[root@localhost /home/Sudley]#echo ${r}r
123r
[root@localhost /home/Sudley]#

实战:
比如我们可以直接用dirname或者basename来分别获取一个文件的目录和文件名,这里换个方式,通过%和#实现

[root@localhost /home/Sudley]#cat test.sh
#!/bin/bash
file="/usr/local/qq/vchat.txt"
file_dir=$(dirname ${file})
file_name=$(basename ${file})
file_dir_1=${file%/*}
file_name_1=${file##*/}
echo $file_dir
echo $file_dir_1
echo $file_name
echo $file_name_1
[root@localhost /home/Sudley]#sh test.sh
/usr/local/qq
/usr/local/qq
vchat.txt
vchat.txt
[root@localhost /home/Sudley]#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值