设 file=/dir1/dir2/dir3/my.file.txt
变量的截断操作
命令 | 意义 | 结果 |
${file#*/} | 去掉第一个 / 及左边的字符串 | dir1/dir2/dir3/my.file.txt |
${file##*/} | 去掉最后一个 / 及左边的字符串 | my.file.txt |
${file#*.} | 去掉第一个 . 及左边的字符串 | file.txt |
${file##*.} | 去掉最后一个 . 及左边的字符串 | txt |
${file%/*} | 去掉最后一个 / 及右边的字符串 | /dir1/dir2/dir3 |
${file%%/*} | 去掉第一个 / 及右边的字符串 | 空串 |
${file%.*} | 去掉最后一个 . 及右边的字符串 | /dir1/dir2/dir3/my.file |
${file%%.*} | 去掉第一个 . 及右边的字符串 | /dir1/dir2/dir3/my |
变量字符串提取
命令 | 意义 | 结果 |
${file:0:5} | 提取第0个字符开始的连续5个字符 | /dir1 |
${file:5:5} | 提取第5个字符开始的连续5个字符 | /dir2 |
变量字符串替换
命令 | 意义 | 结果 |
${file/dir/path} | 将第一个 dir 替换为path | /path1/dir2/dir3/my.file.txt |
${file//dir/path} | 将全部 dir 替换为path | /path1/path2/path3/my.file.txt |
${#file} | 计算出变量 file 值的长度 | 27 |
变量值的长度
命令 | 意义 | 结果 |
${#file} | 计算出变量 file 值的长度 | 27 |
针对变量状态赋值
变量的状态有:空值、非空值和未设定
命令 | 意义 |
${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(非空不处理) |
数组运算
A=(a b c def)
命令 | 意义 | 结果 |
${A[@]}或${A[*]} | 得到数组全部值 | a b c def |
${A[0]} | 得到数组中的第一个元素 | a |
${A[3]} | 得到数组中的第四个元素 | def |
${#A[@]}或${#A[*]} | 数组元素个数 | 4 |
${#A[0]} | 数组第一个元素的长度 | 1 |
${#A[3]} | 数组第四个元素的长度 | 3 |