$ {xyz ## *}在shell文件中的含义是什么?

时间:2016-01-02 20:17:50

标签: linux shell

我正在尝试了解shell脚本。 ${device_info##* }做了什么?

device_info=$(ls -l /dev/disk/by-id/my-disk)
relative_path=${device_info##* }

1 个答案:

答案 0 :(得分:4)

${x##p}是POSIX或Bourne shell中的参数扩展,它删除了最长的(因为##,与#运算符的最短匹配) p匹配来自shell变量 x 。在您的情况下实际匹配的(文件名通配,而不是正则表达式)模式是' *' (表示以空格结尾的任何数字字符。)

您可以自己测试一下:

A="a b cc"
echo longest: ${A##* }
echo shortest: ${A#* }

将打印longest ccshortest b cc

在您的情况下,它将删除ls输出中除最后一列之外的所有列。

模式记录在shell手册页(man bash中的参数扩展部分)中。它也在Open Group POSIX shell command language的第2.6.2节中记录。