深入浅出——Shell中的替换运算符和模式匹配运算符

1、替换运算符2、模式匹配运算符3、参考链接Shell作为一种常用的命令行工具,表示字符串string的长度:未定义变量将报错退出脚本执行?string="Hello:

Shell作为一种常用的命令行工具,其强大的批处理能力得到了广泛应用。在Shell中,替换运算符和模式匹配运算符是两个非常重要的概念。本文将深入浅出地介绍这两个概念,并通过示例代码进行详细解释。

一、替换运算符

在Shell中,替换运算符主要有以下几种:

1. ${var}:表示变量var的值。

2. ${var:-word}:如果变量var没有被定义,则返回word,否则返回变量var的值。

3. ${var:=word}:如果变量var没有被定义,则设置它为word,并返回word,否则返回变量var的值。

4. ${var:?message}:如果变量未定义,则输出错误信息message并退出脚本执行。

5. ${#string}:表示字符串string的长度。

6. ${string%substring}和${string%%substring}:从字符串string右边开始匹配子串substring,并删除匹配到的部分。%表示最短匹配,%%表示最长匹配。

7. ${string#substring}和${string##substring}:从字符串string左边开始匹配子串substring,并删除匹配到的部分。#表示最短匹配,##表示最长匹配。

下面是一些示例代码,帮助读者更好地理解替换运算符的用法:

“`

#!/bin/bash

# ${var}

name=”Tom”

echo “My name is ${name}”

# 输出:My name is Tom

# ${var:-word}

echo “I am a ${gender:-boy}”

# 输出:I am a boy

unset gender

# ${var:=word}

echo “My age is ${age:=18}”

echo $age

# 输出:My age is 18

unset age

# 输出:

# My age is 18

# 18

# ${var:?message}

set -u # 开启严格模式,未定义变量将报错退出脚本执行。

gender=”girl”

echo “I am a ${gender:?Please define your gender.}” # 若$gender未定义,则输出Please define your gender.并退出脚本执行。

unset gender

#echo “I am a “${gender:?Please define your gender.}” # 若$gender未定义,则输出Please define your gender.并退出脚本执行。

string=”Hello, world!”

length=${#string}

echo $length

##输出13

深入浅出——Shell中的替换运算符和模式匹配运算符

string=”/home/admin/test.txt”

filename=${string##*/}

dir=${string%/*}

suffix=${filename##*.}

printf “%sn” “$filename” ##test.txt

printf “%sn” “$dir” ##/home/admin

printf “%sn” “$suffix” ##txt

二、模式匹配运算符

在Shell中,模式匹配运算符主要有以下几种:

1. *:表示任意长度的字符串。

2. ?:表示单个字符。

3. [set]:表示set集合中的任意一个字符。例如,[abc]表示a、b、c中的任意一个字符。

4. [!set]或[^set]:表示不在set集合中的任意一个字符。例如,[!abc]或[^abc]表示非a、b、c中的任意一个字符。

5. {string1,string2,…}:表示string1、string2等字符串之一。例如,{jpg,png,gif}可以匹配jpg、png和gif这三种文件格式。

下面是一些示例代码,帮助读者更好地理解模式匹配运算符的用法:

# *

echo “list all files in current directory:”

for file in *

do

echo $file

done

# ?

echo “list all files with one character name:”

for file in ?

# [set]

echo “list all files with jpg, png or gif format:”

for file in *.{jpg,png,gif}

do

done

# [!set]

echo “list all files except those with txt and log format:”

for file in !(*.{txt,log})

# {string1,string2,…}

echo “my favorite colors are red, green and blue.”

printf “%sn” {red,green,blue}

本文介绍了Shell中的替换运算符和模式匹配运算符。通过示例代码,读者可以更好地理解这两个概念的用法。在Shell编程中,熟练掌握这些操作符可以大大提高编程效率。

参考链接

1. [Shell Scripting Tutorial]()

2. [Bash Reference Manual]()

3. [Advanced Bash-Scripting Guide]()