bash脚本不为变量

时间:2017-02-24 16:59:08

标签: linux bash getopt

我有一个bash文件,我传递的参数如

bash foo.sh update -f /var/ -v true

所以according to this answer我的脚本应该是

if [[ "$1" == "update" ]]; then
    updater 
fi

function updater(){
    verbose='false'
    fflag=''
    error=''

while getopts 'f:v' flag; do
  case "${flag}" in 
    f) fflag="${OPTARG}";;
    v) verbose='false';;
    *) error="bflag";;
  esac
done

  echo $fflag
}

我使用第一个脚本作为入口点,因为我有其他功能可以执行其他操作,但由于某种原因,上面的脚本甚至没有显示$fflag的值我试图移出getopts循环出功能无济于事

1 个答案:

答案 0 :(得分:6)

有3个问题:

  1. 首先定义一个函数,然后在脚本中调用它
  2. 您需要使用"$@"
  3. 将命令行传递给您的函数
  4. 在传递命令行参数之前,请调用shift以删除第一个参数
  5. 您可以使用此脚本:

    updater() {
        verbose='false'
        fflag=''
        error=''
    
        while getopts 'f:v' flag; do
          case "$flag" in
            f) fflag="${OPTARG}";;
            v) verbose='false';;
            *) error="bflag";;
          esac
        done
    
        declare -p fflag
    }
    
    if [[ $1 == "update" ]]; then
        shift
        updater "$@"
    fi