首页 > 解决方案 > ${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 

标签: stringbash

解决方案


您对从左侧修剪到最后一次出现的'/'. 您的脚本必须是:

#!/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到最后一个(包括最后一个)的所有字符'/'


推荐阅读