目录
一、理论
1. ${ }分别替换得到不同的值
2. ${ } 可针对不同的变数状态赋值(沒设定、空值、非空值)
二、实验
1.打印文件名和后缀名
2.${}分别替换
一、理论
1. ${ }分别替换得到不同的值
# 是 去掉左边(键盘上#在 $ 的左边);
%是去掉右边(键盘上% 在$ 的右边);
单一符号是最小匹配;两个符号是最大匹配;
*是需要删除那边就放在哪边。
表1 ${ }替换
替换 | 功能 |
${file#*/} | 删掉第一个 / 及其左边的字符串 |
${file##*/} | 删掉最后一个 / 及其左边的字符串 |
${file#*.} | 删掉第一个 . 及其左边的字符串 |
${file##*.} | 删掉最后一个 . 及其左边的字符串 |
${file%/*} | 删掉最后一个 / 及其右边的字符串 |
${file%%/*} | 删掉第一个 / 及其右边的字符串 |
${file%.*} | 删掉最后一个 . 及其右边的字符串 |
${file%%.*} | 删掉第一个 . 及其右边的字符串 |
2. ${ } 可针对不同的变数状态赋值(沒设定、空值、非空值)
表2 ${ }状态赋值
状态赋值 | |
${file-my.file.txt} | 假如 $file 沒有设定,则使用 my.file.txt 作传回值。(空值及非空值时不作处理) |
${file:-my.file.txt} | 假如 $file 沒有设定或为空值,则使用 my.file.txt 作传回值。 (非空值时不作处理) |
${file+my.file.txt} | 假如 $file 设为空值或非空值,均使用 my.file.txt 作传回值。(沒设定时不作处理) |
${file:+my.file.txt} | 若 $file 为非空值,则使用 my.file.txt 作传回值。 (沒设定及空值時不作处理) |
${file=my.file.txt} | 若 $file 沒设定,则使用 my.file.txt 作传回值,同时将 $file 赋值为 my.file.txt 。 (空值及非空值时不作处理) |
${file:=my.file.txt} | 若 $file 沒设定或为空值,则使用 my.file.txt 作传回值,同時将 $file 赋值为my.file.txt 。 (非空值时不作处理) |
${file?my.file.txt} | 若 $file 沒设定,则将 my.file.txt 输出至 STDERR。 (空值及非空值時不作处理) |
${file:?my.file.txt} | 若 $file 没设定或为空值,则将 my.file.txt 输出至 STDERR。 (非空值時不作处理) |
${#var} | 可计算出变量值的长度 |
二、实验
1.打印文件名和后缀名
(1)变量赋值
[root@centos2 /]# file=test.tar
(2)打印文件名
[root@centos2 /]# echo ${file%.*}
test
(3)打印后缀名
[root@centos2 /]# echo ${file##*.}
tar
2.${}分别替换
(1)变量赋值
[root@centos2 /]# file=/abc1/abc2/abc3/my.file.txt
(2)删掉第一个 / 及其左边的字符串
[root@centos2 /]# echo ${file#*/}
abc1/abc2/abc3/my.file.txt
(3)删掉最后一个 / 及其左边的字符串
[root@centos2 /]# echo ${file##*/}
my.file.txt
(4)删掉第一个 . 及其左边的字符串
[root@centos2 /]# echo ${file#*.}
file.txt
(5)删掉最后一个 . 及其左边的字符串
[root@centos2 /]# echo ${file##*.}
txt
(6)删掉最后一个 / 及其右边的字符串
[root@centos2 /]# echo ${file%/*}
/abc1/abc2/abc3
(7)删掉第一个 / 及其右边的字符串:(空值)
[root@centos2 /]# echo ${file%%/*}
(8)删掉最后一个 . 及其右边的字符串
[root@centos2 /]# echo ${file%.*}
/abc1/abc2/abc3/my.file
(8)删掉第一个 . 及其右边的字符串
[root@centos2 /]# echo ${file%%.*}
/abc1/abc2/abc3/my