シェルにおける$*と$@の違いの説明
シェル特殊変数の項で示したように、$*と$@はどちらも関数やスクリプトに渡されるすべての引数を表しますので、この項では両者の違いに焦点を当てます。
と$@が二重引用符 ""で囲まれていない場合は、両者に違いはなく、どちらも受け取った各引数をスペースで区切られた1つのデータとして扱います。
しかし、二重引用符 " " で囲むと、次のような違いがあります。
"∗ "は、各パラメータを1つのデータとして扱うのではなく、すべてのパラメータを全体として扱います。 "*" は、各パラメータを1つのデータとして扱うのではなく、すべてのパラメータを1つのデータとして扱います。"∗" は、各パラメータを1つのデータとして見るのではなく、すべてのパラメータを全体として見ます。 "@" は、依然として各パラメータを互いに独立した1つのデータとして扱います。
例えば、5つのパラメータが渡された場合、"* "では5つのパラメータが組み合わされて1つのデータとなり、互いに区別がつかなくなり、"* "では、5つのパラメータが組み合わされて1つのデータとなり、互いに区別がつかなくなり、" ∗ "の場合は5つのパラメータが統合されて1つのデータとなり、互いに区別がつかなくなり、"@"の場合は5つのパラメータが互いに独立して、5つのデータとなるのだそうです。
echo で直接 "∗ " と "*" と "@" を出力して比較すると違いが分かりませんが、for ループで一つずつ出力すると違いが一目瞭然になります。
例
#! /bin/bash
echo "--- \$* demo ---"
for i in "$*"; do
echo $i
done
echo "-- \$@ demo ---"
for i in "$@"; do
echo $i
done
スクリプトを実行すると、次のような出力が得られます。
$ chmod +x test.sh
$ . /test.sh 1 2 3
-- $* デモ ---
1 2 3
-- $@ デモ ---。
1
2
3
シェル$*と$@の違いについての説明は以上となります。Shell $* $@ の詳細については、Script House の過去記事を検索するか、以下の記事を引き続きご覧ください。
関連
最新
-
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 実装 サイバーパンク風ボタン