在 bash 中处理命名参数

kar*_*yan 6 bash shell

下面是脚本。当我用命令运行这个时

./scriptname --deploy --uglify"
Run Code Online (Sandbox Code Playgroud)

我得到了echo "$deploy"as的结果true。但应该是uglify正确的,因为deploy=$2

#!/bin/bash

deploy=true
uglify=true

while (( $# > 1 )); do 
    case $1 in
    --deploy) deploy="$2" echo "$deploy";;
    --uglify) uglify="$2";;
    *) break;
    esac; shift 2
done
Run Code Online (Sandbox Code Playgroud)

UtL*_*Lox 5

你的意思是这样的:

#!/bin/bash

deploy=false
uglify=false

while (( $# >= 1 )); do 
    case $1 in
    --deploy) deploy=true;;
    --uglify) uglify=true;;
    *) break;
    esac;
    shift
done

echo "deploy: $deploy"
echo "uglify: $uglify"
Run Code Online (Sandbox Code Playgroud)

例子

$ ./scriptname
deploy: false
uglify: false


$ ./scriptname --deploy
deploy: true
uglify: false


$ ./scriptname --uglily
deploy: false
uglify: true

$ ./scriptname --depoly --uglily
deploy: true
uglify: true
Run Code Online (Sandbox Code Playgroud)