shell中${ } 的一些特异功能

设 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

 

你可能感兴趣的:(linux)