我知道这对你们中的一些人来说听起来很愚蠢,但我不擅长正则表达式解决方案。我在其他人编写的函数中遇到了以下表达式,但无法弄清楚他/她在做什么。
正则表达式 1
[ ! -d ${2%/*}/ ]
正则表达式 2
cmp -s $2 ${2##*/}
您可以猜到,这些正则表达式评估正在脚本中使用,执行文件更新并移动它们。我想知道的含义
${2%/*}/
和
${2##*/}
让我们举一个例子来更好地理解:
s='abc/def/foo'
echo "${s%/*}/"
abc/def/
echo "${s##*/}"
foo
- 第一个表达式是丢弃输入中最后一个
/
之后的文本。 - 第二个表达式是丢弃输入中最后一个
/
之前的所有文本。
您可以在man bash
中看到更多详细信息:
-
##*/
用于匹配从输入字符串开始/
之前的最长字符串。 -
%/*
用于匹配从输入末尾/
后的文本。