逆引きシェルスクリプト/特殊変数$*と$@の違い
の編集
Top
/
逆引きシェルスクリプト
/
特殊変数$*と$@の違い
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
(no template pages)
#navi(../) * シェルの特殊変数である$*と$@の違い [#d381e1f2] シェルスクリプトに渡された引数を展開する、$* と $@ の動作の違いについて以下に記述します。 #contents #htmlinsertpcsp(linux_ads_top.html,linux-sp.html) * 関連記事 [#p5619315] -[[シェルの$特殊変数の一覧および説明>逆引きシェルスクリプト/$特殊変数の一覧および説明]] -[[特殊変数$*と$@の違い>逆引きシェルスクリプト/特殊変数$*と$@の違い]] -[[シェルでランダム値を使用する>逆引きシェルスクリプト/シェルでランダム値を使用する]] * ダブルクォーテーションで囲むと動作が違ってくる [#z1fbb2e2] 以下のサンプルスクリプトを使い、 $* と $@ の違いを説明します。 ** サンプルシェルスクリプト [#xf14b4a5] #ref(arg.sh) #!/bin/bash echo '== $* test ==' for arg in $* do echo $arg done echo '== "$*" test ==' for arg in "$*" do echo $arg done echo '== $@ test ==' for arg in $@ do echo $arg done echo '== "$@" test ==' for arg in "$@" do echo $arg done ** 実行結果(その1) [#ae17c1d4] 以下の実行結果を見た結果のまとめ - $*, $@, "$@" は全て同様な動作となっており、3つの引数が分割されて格納されているのが確認できます。 - "$*" はサンプルシェルスクリプトに与えた3つの引数を分解せずに1つとして格納されているのが確認できます。 $ ./arg.sh 1 2 3 == $* test == 1 2 3 == "$*" test == 1 2 3 == $@ test == 1 2 3 == "$@" test == 1 2 3 ** 実行結果(その2) [#u74b4bef] 以下の実行結果を見た結果のまとめ - $*, $@ は同様な動作となっており、ダブルクォーテーションで2つの引数としてシェルスクリプトに渡しましたが、すべて区切り文字で展開され6つに分解されています。 - "$*" はサンプルシェルスクリプトに与えた2つの引数を分解せずに1つとして格納されているのが確認できます。 - "$@" はダブルクォーテーションで2つの引数として渡したので2つに分解され格納されています。 $ ./arg.sh "1 2 3" "a b c" == $* test == 1 2 3 a b c == "$*" test == 1 2 3 a b c == $@ test == 1 2 3 a b c == "$@" test == 1 2 3 a b c * まとめ [#nf3490aa] - $*, $@ と記述した場合は、どちらも同様の動作となる。 - ダブルクォーテーションで囲んで複数の引数を渡す場合は、"$*" と "$@" では動作が異なってしまう。 以上、$*, $@ の違いでした。 #htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)
タイムスタンプを変更しない
#navi(../) * シェルの特殊変数である$*と$@の違い [#d381e1f2] シェルスクリプトに渡された引数を展開する、$* と $@ の動作の違いについて以下に記述します。 #contents #htmlinsertpcsp(linux_ads_top.html,linux-sp.html) * 関連記事 [#p5619315] -[[シェルの$特殊変数の一覧および説明>逆引きシェルスクリプト/$特殊変数の一覧および説明]] -[[特殊変数$*と$@の違い>逆引きシェルスクリプト/特殊変数$*と$@の違い]] -[[シェルでランダム値を使用する>逆引きシェルスクリプト/シェルでランダム値を使用する]] * ダブルクォーテーションで囲むと動作が違ってくる [#z1fbb2e2] 以下のサンプルスクリプトを使い、 $* と $@ の違いを説明します。 ** サンプルシェルスクリプト [#xf14b4a5] #ref(arg.sh) #!/bin/bash echo '== $* test ==' for arg in $* do echo $arg done echo '== "$*" test ==' for arg in "$*" do echo $arg done echo '== $@ test ==' for arg in $@ do echo $arg done echo '== "$@" test ==' for arg in "$@" do echo $arg done ** 実行結果(その1) [#ae17c1d4] 以下の実行結果を見た結果のまとめ - $*, $@, "$@" は全て同様な動作となっており、3つの引数が分割されて格納されているのが確認できます。 - "$*" はサンプルシェルスクリプトに与えた3つの引数を分解せずに1つとして格納されているのが確認できます。 $ ./arg.sh 1 2 3 == $* test == 1 2 3 == "$*" test == 1 2 3 == $@ test == 1 2 3 == "$@" test == 1 2 3 ** 実行結果(その2) [#u74b4bef] 以下の実行結果を見た結果のまとめ - $*, $@ は同様な動作となっており、ダブルクォーテーションで2つの引数としてシェルスクリプトに渡しましたが、すべて区切り文字で展開され6つに分解されています。 - "$*" はサンプルシェルスクリプトに与えた2つの引数を分解せずに1つとして格納されているのが確認できます。 - "$@" はダブルクォーテーションで2つの引数として渡したので2つに分解され格納されています。 $ ./arg.sh "1 2 3" "a b c" == $* test == 1 2 3 a b c == "$*" test == 1 2 3 a b c == $@ test == 1 2 3 a b c == "$@" test == 1 2 3 a b c * まとめ [#nf3490aa] - $*, $@ と記述した場合は、どちらも同様の動作となる。 - ダブルクォーテーションで囲んで複数の引数を渡す場合は、"$*" と "$@" では動作が異なってしまう。 以上、$*, $@ の違いでした。 #htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)
テキスト整形のルールを表示する
添付ファイル:
arg.sh
563件
[
詳細
]