[解決済み] 私のbashスクリプトに渡されたすべての引数を、私の関数に渡すにはどうすればよいですか?[重複しています。]
質問
を定義したとします。
function abc()
は、スクリプトに渡された引数の分析に関連するロジックを処理します。
bashスクリプトが受け取ったすべての引数を渡すにはどうしたらよいですか?paramsの数は可変なので、このように渡された引数をハードコードすることはできません。
abc $1 $2 $3 $4
編集 . それよりも、私の関数がスクリプトの引数の変数にアクセスできるようにする方法はないでしょうか?
解決方法は?
その
$@
変数は、スペースで区切られたすべてのコマンドラインパラメータに展開されます。 以下はその例である。
abc "$@"
を使用する場合
$@
は、スペースやワイルドカードを含む引数の誤読を避けるため、 (ほとんど) 常に二重引用符で囲む必要があります (以下を参照)。 これは複数の引数に対して有効である。また、これはすべてのPOSIX準拠のシェルに移植可能である。
また、特筆すべきは
$0
(一般にスクリプトの名前やパス)は
$@
.
は
Bash リファレンスマニュアル 特殊パラメータ編
には、次のように書かれています。
$@
は、1から始まる位置指定パラメータに展開されます。 二重引用符の中で展開される場合、各パラメータは別々の単語に展開されます。 つまり
"$@"
は次のように等価です。
"$1" "$2" "$3"...
.
通過する 一部 引数を指定します。
を渡したい場合は
を除くすべての
引数を指定する場合は、まず
shift
を渡して、最初の引数を消費させ、その後に
"$@"
を使えば、残りの引数を別のコマンドに渡すことができます。 bashでは(zshやkshもそうですが、dashのような普通のPOSIXシェルでは)、配列スライスの変種を使って、引数リストをいじらずにこれを行うことができます。
"${@:3}"
で始まる引数を取得します。
"$3"
.
"${@:3:4}"
で始まる4つの引数まで取得できます。
"$3"
(例)
"$3" "$4" "$5" "$6"
)、それだけの引数が渡された場合。
おそらくやりたくないこと。
"$*"
は、すべての引数を一つの文字列にまとめてしまいます(スペースで区切るか、あるいは
$IFS
です)。このため、スペース
内
引数とスペース
の間に
の引数であるため、一般に良くないとされています。しかし、例えば、引数を印刷するためには大丈夫かもしれません。
echo "$*"
ただし、区別のためのスペースが必要でない場合は、この限りではありません。
引数を通常の変数に代入する(例えば
args="$@"
のように、すべての引数をひとまとめにします。
"$*"
が行います。引数を変数に格納したい場合は、配列を使用して
args=("$@")
(括弧で囲むと配列になります)そして、それらを例えば
"${args[0]}"
など。なお、bashやkshでは、配列のインデックスは0から始まるので
$1
は
args[0]
一方、zshは配列のインデックスを1から始めるので
$1
は
args[1]
. また、dashのようなもっと基本的なシェルでは、配列は全くありません。
ダブルクオートを省略する場合は
$@
または
$*
の場合、それぞれの引数を別々の単語に分割しようとします。
$IFS
また、ファイル名のワイルドカードのように見えるものはすべて、 一致するファイル名のリストに展開しようとします。これは本当に奇妙な効果をもたらすことがあるので、ほとんど常に避けるべきです。(ただし、zsh では、デフォルトでこの展開は行われません)。
関連
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] 変数を参照渡しする方法を教えてください。
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashでコマンドライン引数を解析するには?
-
[解決済み] bashシェルスクリプトの全引数を伝搬させる
-
[解決済み】Bashスクリプトに渡された引数の数を確認する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】シェルスクリプトで整数式が期待されるエラーが発生する
-
[解決済み] Bashで文字列から改行を削除する方法
-
[解決済み] Bashで$()と`の違いはあるのでしょうか?重複] [重複
-
[解決済み] bash スクリプトの "${BASH_SOURCE[0]}" と $( cd $( dirname "xxx" && pwd )) の意味について
-
[解決済み] ssh / リモートbashコマンドでシングルクォート文字をエスケープするにはどうすればよいですか?
-
[解決済み] docker alpine /bin/sh script.sh not found
-
npm err インストールエラーの解決策
-
[解決済み] シェルスクリプトでこのエラーを解決するにはどうしたらよいでしょうか。"読み取り。Illegal option -t "というエラーはどうすれば解決できますか?
-
[解決済み] bashシェルスクリプトの全引数を伝搬させる
-
[解決済み] Bashでフラグ付きの引数を取得する方法