bash脚本不为变量分配标志

use*_*807 2 linux bash getopt

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

bash foo.sh update -f /var/ -v true
Run Code Online (Sandbox Code Playgroud)

所以根据这个答案我的脚本应该是这样的

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
}
Run Code Online (Sandbox Code Playgroud)

我使用第一个脚本作为入口点,因为我有其他功能做其他事情,但由于某种原因,上面的脚本甚至没有显示$fflag我尝试从函数中移出getopts循环的值无济于事

anu*_*ava 6

有3个问题:

  1. 首先在开始时定义一个函数,然后在脚本中调用它
  2. 您需要使用命令行传递给您的函数 "$@"
  3. 在传递命令行参数之前,调用shift删除第一个参数

您可以使用此脚本:

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
Run Code Online (Sandbox Code Playgroud)