深入浅出——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中的替换运算符和模式匹配运算符缩略图 深入浅出——Shell中的替换运算符和模式匹配运算符](https://www.72715.net/wp-content/uploads/2023/05/77fad94ce1aa6c4c5be3bc68d48f6e55.png)
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]()