2012-09-07 8 views
26

この質問は、私は、このようなパイソン、パイソン、ルビー、およびJavaScriptなどのスクリプト言語のサポートリスト構造の多くを、知っているので、どのようなLinuxのシェルについてDoes the shell support sets?Linuxシェルのサポートリストのデータ構造はありますか?

と同じではありませんか?

シェルはそのような構文をサポートしていますか?

for i in list: 
do 
    print i 
done 

私が最初に例えばリスト、初期化します:シェルスクリプトをプログラミングするとき

ListName = [ item1, item2, ..., itemn ] 

はそれ

を反復は、可能ですか?リストを作るために

+1

Bourneシェル/ POSIXシェルには配列がありません。しかし、アイテムのリストのアイテムのための ';すべてのシェルで確かにサポートされています。また、一連のファイルをループするためのグロビングの便利な使用にも注意してください。 '* .datのファイルのために'はワイルドカードを拡張することによってトークンのリストを構築します(しかし、悲しいことに、多くのユーザーは$(ls a * .dat)のファイルのために 'のようなことをしてしまいます。 – tripleee

答えて

45

これはリストをサポートしますが、別のデータ構造ではありません。

かかわらず、そのリストが作成される方法の空白区切りの(一般的な意味で)リスト上forループ反復、文字通りかどうか:

for i in 1 2 3; do 
    echo "$i" 
done 

またはパラメータ拡張を介し:

listVar="1 2 3" 
for i in $listVar; do 
    echo "$i" 
done 

やコマンドの置換:

for i in $(echo 1; echo 2; echo 3); do 
    echo "$i" 
done 

ARRA yは、より構造化された値のリストを含むことができる特別なパラメータです。各要素には空白が含まれています。違いを比較してください:

array=("item 1" "item 2" "item 3") 
for i in "${array[@]}"; do # The quotes are necessary here 
    echo "$i" 
done 

list='"item 1" "item 2" "item 3"' 
for i in $list; do 
    echo $i 
done 
for i in "$list"; do 
    echo $i 
done 
for i in ${array[@]}; do 
    echo $i 
done 
+0

@の意味は何ですか? –

+2

これは、特定の要素だけでなく、配列のすべての要素を展開する特殊なインデックスです。 – chepner

+0

なぜ 'for i" $ {array [@]} ";'が3行を出力するのか分かりませんでした。 'echo $ {array [@]}'は 'item 1 item 2 item 3'という1行を出力するので、$ {array [@]}"; iのfor iは 'for i in "アイテム1アイテム2アイテム3"; ';その結果、「item 1 item 2 item 3」の1行になります。私は何が欠けていますか?ありがとうございます。 – Svech87

7

は、単に

colors=(red orange white "light gray") 

技術的には、配列であることを行うが、 - もちろん - それはすべてのリスト機能を備えています。
Pythonリストでさえも配列で実装されています。

+1

配列を反復処理するには、$ {colors [*]}のitemにforを使用します。 do echo $ item; done' – neevek

+8

@Neevekそれはあなたが思うことをしません。 「ライトグレー」は「ライト」と「グレー」の2つの項目として扱われます。あなたは$ {colors [@]} "'( '@'ではなく、 '*'で囲んで引用符で囲む)を使う必要があります。 – chepner

+0

*を使用すると「ライトグレー」が2つの項目として扱われるのはなぜですか?どこでそのような詳細の文書を見つけることができますか?男? – hugemeow

関連する問題