问题描述
我尝试为 a Wikimedia opensource project but I don't get what ##*/
means in bash ${qidpath##*/}
做出贡献。在 google 上搜索 ##*/
很混乱。
/tmp/datasets/raw/* 包含文件夹列表。
for qidpath in /tmp/datasets/raw/*;
do
qid=$(echo ${qidpath##*/} | cut -d'-' -f 1)
if [[ $qid == Q* ]] ; then
echo "--> Processing ${qid}..."
/usr/bin/python3.5 /home/www/CommonsDownloadTool/commons_download_tool.py --keep --sparqlurl https://lingualibre.org/bigdata/namespace/wdq/sparql --sparql "SELECT ?file ?filename WHERE { ${query} ?record prop:P4 entity:${qid}. }" --threads 4 --directory /tmp/datasets/raw/ --output "/tmp/datasets/${qidpath##*/}.zip" --fileformat ogg
fi
done
解决方法
这将删除以 */
开头的所有模式:这将在您的情况下获得文件名。
将 the manual 添加到您的书签:
${parameter#word}
${parameter##word}
单词被扩展以产生一个模式并根据下面描述的规则进行匹配(参见模式匹配)。如果图案 匹配参数扩展值的开头,然后 扩展的结果是参数的扩展值 最短匹配模式(‘#’大小写)或最长匹配 模式(“##”案例)已删除。如果参数是‘@’或‘’, 模式去除操作应用于每个位置参数 转,扩展是结果列表。如果参数是一个 下标有‘@’或‘’的数组变量,模式移除 操作依次应用于数组的每个成员,并且 扩展是结果列表。