${}一些特殊用法总结

${}最常用的就是获取变量的值,除此之外,他还有一些特殊用法。

1. 字符串截取

 shell中直接用${}就可以完成字符串截取功能,非常方便。比如用find 命令查找文件名后,对输出结果进行截取,区分目录和文件名:

#!/bin/bash

set -e

file_names=`find ~  -name "test.txt"`

for file_name in ${file_names}
do
        echo "absolute file: ${file_name}"
        echo "directory is: ${file_name%/*}" #去掉最后一个/及其右边的串,获取目录路径
        echo "file name is:${file_name##*/}" #去掉最后一个/及其左边的串,获取文件名
        echo "================================="        

done

 输出结果如下:

absolute file: /home/dcj/command/COPY/test.txt
directory is: /home/dcj/command/COPY
file name is:test.txt
=================================
absolute file: /home/dcj/test.txt
directory is: /home/dcj
file name is:test.txt
=================================

 再举个不太恰当但是能说明问题的例子:

#!/bin/bash

set -e

var=a.b.c.d.txt

# 假设特殊字符命名为key

# '#*key'去掉第一个key及其左边
echo ${var#*.} #==> b.c.d.txt

# '##*key' 去掉最后一个key及其左边
echo ${var##*.} #==> txt

# '%key*' 去掉最后一个key及其右边
echo ${var%.*} #==> a.b.c.d

# '%%key*' 去掉第一个key及其右边
echo ${var%%.*} #==> a

 上面的例子只能是根据key要么截取最前面的,要么截取最后面的一部分。

 还有一种语法,支持精确地从第几位到第几位的字符串截取:

语法:${var:i:j}

 说明:

  • i,j 为整数,i >0才可以达到部分截取的效果

  • j <0 时表示倒着取第几位(不包括下标本身的值)

  • j >0 时表示正着取第几位(包括下标本身的值)

  • 注意i, j最好不要越界

  • 自己测试dash解释器执行会报错,ubuntu的 sh 命令是dash的软连接

set -e

var='abcdefg'

echo "${var:0:5}" #==> 第0位到第5位的值,包括第5位,也就是abcde

echo "${var:1:-2}" #==>第一位到倒数第2位的值,不包括倒数第二位,也就是bcde

 没有太多的规律去记,所以记下来。

语法含义
${var#*key}去掉第一个key及其左边
${var##*key}去掉最后一个key及其左边
${var%key*}去掉最后一个key及其右边
${var%%key*}去掉第一个key及其右边
${var:i:j}字符串按位截取,注意ubuntu的sh命令报错
2. 字符串替换

 这个就简单了,一看就明白:

var=123abc456abc789abc

echo ${var/123/hello} #==> 替换第一个123为hello
echo ${var//123/hello} #==>替换所有的123为hello

echo ${var}

注意: ubuntu的sh执行仍然会报错

3. 字符串获取长度
var=
echo ${#var} #==>0 

var=""
echo ${#var} #==>0

var="12345"
echo ${#var} #==>5
4. 字符串状态赋值

 说白了就是如果字符串是怎样的状态(空值,未设值), 则用哪个值来替换。

 shell中几种值的情况:

  • 未定义:未定义变量却使用了这个变量

  • 空值: 定义了该变量,但是该变量没有值 , 比如:var=”“, var=

  • 非空值:定义了该变量,且不是空值

语法含义
${var-help}当且仅当var未定义,返回help,否则返回var
${var:-help}当且仅当var未定义或空值,返回help,否则返回var
${var+help}当且仅当var空或非空,返回help,未定义返回空
${var:+help}当且仅当var非空,返回help
${var=help}当且仅当var未定义,返回help
${var:=help}当且仅当var未定义或空,返回help

 ${var:-help} 可在shell脚本调用或函数调用时处理默认参数,如:

action=${1:-help}
# 没传参数,$action为help,否则为$1的值

 睡觉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值