関数のすべてのパラメータを1行に貼り付ける方法はありますか?

関数のすべてのパラメータを1行に貼り付ける方法はありますか?

私はそれを定期的に使用している.bashrcので、今これを持っています。 withなど、オプションで渡すことができる他の項目を読むことができるようにしたいです。私はこれをどうすることができますか?git statusgit diff-sgit diff機能一つではなくニックネーム$#渡されたパラメータの数がわかるということはわかりますが、行status48の後にすべてのパラメータを貼り付けるにはどうすればよいですか?

 42 # =========================================================
 43 #                         Git
 44 # =========================================================
 45 g () {
 46   case $1 in
 47     "s")
 48       git status
 49       ;;
 50     "d")
 51       git diff
 52       ;;
 53   esac
 54 }

答え1

"$@"すべての引数は正しく引用された引数に置き換えられますので、サブコマンドのショートカットを移動して削除してください。

g () {
  cmd=$1
  shift
  case "$cmd" in
    s) git status "$@" ;;
    d) git diff "$@" ;;
  esac
}

gitただし、これを行うのではなく、代わりに上記のエイリアスを設定することをお勧めします。

git alias s status
git alias d diff

または一つもない場合git-alias(通常git-extras)、

git config --global alias.s status
git config --global alias.d diff

(一度だけ実行すると、エイリアスがに保存されます~/.gitconfig。)

その後、シェルから

alias g=git

g sパラメータを含め、期待どおりに動作することを確認できます。

答え2

例えば

#!/bin/bash

g () {
    for arg in "$@"; do echo "$arg"; done
}
g 1 2 3 4

スクリプトの実行

$ ./git.sh
1
2
3
4

関連情報