string - ${0##/} 在函数外有效,但在函数内无效
问题描述
SCRIPT="${0##}" #works it strips off the path and returns the name of the shell script
echo "Script $script"
getVar(){
SCRIPT="${0##/}" #does not strip off the path it returns the $0 value
echo "Script $script"
}
getVar
解决方案
您对从左侧修剪到最后一次出现的'/'
. 您的脚本必须是:
#!/bin/bash
SCRIPT="${0##*/}" # missing "*/" as part of expansion
echo "Script $SCRIPT" # $SCRIPT must be uppercase
getVar(){
SCRIPT="${0##*/}" # missing the "*" as part of expansion
echo "Script $SCRIPT"
}
getVar
带有子字符串删除的参数扩展的快速总结是:
${var#pattern} Strip shortest match of pattern from front of $var
${var##pattern} Strip longest match of pattern from front of $var
${var%pattern} Strip shortest match of pattern from back of $var
${var%%pattern} Strip longest match of pattern from back of $var
模式可以包括'*'
用于匹配任意数量字符的 glob。因此${var##*/}
删除从开头(前面)var
到最后一个(包括最后一个)的所有字符'/'
。
推荐阅读
- c - 多客户端服务器:quitfunction
- regex - 正则表达式:在 url 中查找用户名
- django - Django ORM 对象 ID
- javascript - 使用原生 JavaScript 的 mouseenter 委托?
- java - 为什么从生成的 jar 中找不到 jdbc 驱动程序?
- c# - 有没有办法跟踪反应命令何时完成执行?
- javascript - 使用 URL.Action 时的路由问题
- python - 重命名熊猫中各种格式的列标题
- ios - 文本字段上的 UITapGestureRecognizer 与预期不符
- google-app-engine - 在 Google App Engine 上解码 Firebase idToken