BASH:最初のパラメータの後にパラメータが渡されない場合にデフォルトパラメータを渡す方法

BASH:最初のパラメータの後にパラメータが渡されない場合にデフォルトパラメータを渡す方法

case次の文を含むbashスクリプトがあります。

case "$1" in 
    bash)
        docker exec -it $(docker-compose ps -q web) /bin/bash
        ;;
    shell)
        docker exec -it $(docker-compose ps -q web) python manage.py shell
        ;;
    test)
        docker exec -it $(docker-compose ps -q web) python manage.py test "${@:2}"
        ;;
esac

testコマンドはデフォルトのパラメーターを渡したいが、appsユーザーがtestbashスクリプトを除くすべてのパラメーターを渡さない場合にのみ可能です。

したがって、ユーザーが次のようにスクリプトを実行した場合:

./do test

コマンドを実行する必要があります

docker exec -it $(docker-compose ps -q web) python manage.py test apps

ただし、次のようにスクリプトを実行する場合:

./do test billing accounts

コマンドを実行する必要があります

docker exec -it $(docker-compose ps -q web) python manage.py test billing accounts

パラメータが存在するかどうかをテストする方法後ろに最初の主張?

ベストアンサー1

bash変数置換を試してみました。

   test)
        shift
        docker exec -it $(docker-compose ps -q web) python manage.py test "${@-apps}"
        ;;

$*代わりに他の方法を確認することをお勧めします$1

case $* in 
    bash)
         ...
    test)
         docker exec -it $(docker-compose ps -q web) python manage.py test apps
         ;;
    test\ *)
         docker exec -it $(docker-compose ps -q web) python manage.py test "${@:2}"
         ;;

おすすめ記事