-1

次のコマンドが何をするのか理解したい

set -- "$@" "-h"

gnuのマニュアルによると

--

  If no arguments follow this option, then the positional parameters are unset.    
  Otherwise, the positional parameters are set to the arguments, even if some
  of them begin with a ‘-’.

しかし、そのような説明からあまり有用な情報を引き出すことはできません。

私が理解しているように、次は-h関数の引数リストに追加されます。

set -- "$@" "-h"

しかし、以下が実際に などに置き換え--helpられるのはどうですか。-h

 printf '%s\n' "$*"
 for arg in "$@"; do
   shift
   printf '%s\n' "--> arg: $arg"
   case "$arg" in
     "--Version")   set -- "$@" "-V"   ;;
     "--usage")     set -- "$@" "-u"   ;;
     "--help")      set -- "$@" "-h"   ;;
     "--verbosity") set -- "$@" "-v"   ;;
     *)             set -- "$@" "$arg" ;;
   esac
 done
4

1 に答える 1

4

簡単な答え:-h現在の引数リスト (別名、位置パラメーター) の最後に追加します。

長い答え:"$@"現在の引数リスト (つまり、現在のスクリプト、関数、または関連するコンテキストに渡される引数のリスト) に展開されます。現在の引数リストを . の後のものにset -- whatever 置き換え--ます。したがって、現在の引数リストを次のように置き換えます... 現在の引数リストの後に-h.

たとえば、 で実行されたスクリプトを使用しているとし./scriptname foo bar bazます。その場合、引数リストはfoo, bar, baz(つまり$1、"foo"、$2"bar"、および$3"baz") です。スクリプトでは、

set -- "$@" "-h"

次のように展開されます。

set -- "foo" "bar" "baz" "-h"

...引数リストをfoobarbaz、およびに設定します-h

于 2021-08-29T19:18:47.140 に答える