空の文字列と要素がゼロのリストはどのように異なる動作をしますか?

空の文字列と要素がゼロのリストはどのように異なる動作をしますか?

~からhttps://unix.stackexchange.com/a/94200/674

位置引数がない場合($#は0)、「$@」は次に展開されます。何もない(いいえ空の文字列、しかしゼロ要素を含むリスト)

それでは、空の文字列は要素がゼロのリストとどのように異なる動作をしますか?

「0個の要素を含むリスト」とは、「0個の要素を含む配列」を意味しますか?私はbashに概念がないと思いますlist

「なし」が必ずしも「リスト」または配列ではないことを意味できますか?

ベストアンサー1

はい、ほとんどのシェルにはリスト(変数用)の概念はありません。
これは定義されたコンテンツタイプ(文字列または数字とは別のもの)ではありません。

ただし、コマンドの引数はリストです。

これは非常に特別なデータ型で、リストとしてのみ表現されます"$*""$@"しかし、違いがあります。

$ set -- one two t33
$ printf '<%s> ' "$*" ; echo
<one two t33>

$ printf '<%s> ' "$@" ; echo
<one> <two> <t33>

$ for s; do printf '<%s>' "$s" ; done; echo
<one><two><t33>

説明の後、引用符は、要素がゼロのパラメータリストが要素のないリストと同じであることを意味します。

  • つまり、リストは消えます(印刷する要素はありません)。

    $ set -- 
    $ echo $#
    0
    
    $ printf '<%s>' "$@" ; echo
    <>
    
    $ for s in "$*"; do echo "<a>" ; done
    <a>
    
    $ for s in "$@"; do echo "<a>" ; done
    $
    

最終コードは、「空」(ヌル)文字列でもなく「何も」印刷しません。

あなたの質問について:

「なし」が必ずしも「リスト」または配列ではないことを意味できますか?

何もない」はい(空)「リスト」でなければなりません。しかし、「空の文字列」が存在します。

おすすめ記事