我正在尝试了解shell脚本。 ${device_info##* }
做了什么?
device_info=$(ls -l /dev/disk/by-id/my-disk)
relative_path=${device_info##* }
答案 0 :(得分:4)
${x##p}
是POSIX或Bourne shell中的参数扩展,它删除了最长的(因为##
,与#
运算符的最短匹配) p匹配来自shell变量 x 的。在您的情况下实际匹配的(文件名通配,而不是正则表达式)模式是' *
' (表示以空格结尾的任何数字字符。)
您可以自己测试一下:
A="a b cc"
echo longest: ${A##* }
echo shortest: ${A#* }
将打印longest cc
和shortest b cc
。
在您的情况下,它将删除ls
输出中除最后一列之外的所有列。
模式记录在shell手册页(man bash
中的参数扩展部分)中。它也在Open Group POSIX shell command language的第2.6.2节中记录。