変数を作成し、ループを介して値を割り当てます(bash)


12

bash変数を作成し、ループを介してそれらに値を割り当てる方法はありますか?

以下の線に沿った何か:

#!/bin/bash

c=0
for file in $( ls ); do
    var"$c"="$file";
    let c=$c+1;
done

編集:これがリストの代わりにならないことを指摘してくれた@Costasと@mdpcに感謝します。問題は理論のみです。


1
注:これをコマンドとして実行した場合、セットアップは変数を現在のプロセスでのみ変更/変更/割り当てし、親プロセスでは変更しないことに注意してください。「。」を使用してファイルを入手できます。コマンド(EX:。new_vars)を使用して、これを現在のプロセス内で実行します。
mdpc 2015

わかりましたが、上記は実際には動作しません。var"$c"それを壊します。@Costasの回答は、単一のリスト変数に複数の値を割り当てる方法を示しています-変数を実際にループで生成できるかどうかを理論的に尋ねています。
toxefa

うーん...なぜ複雑なのか、新しい変数を使用するだけでファンファーレなしに作成されます。
mdpc 2015

回答:


14

まあ、あなたは絶対に次のようにevalを使うことができます:

c=0
for file in $( ls ); do
    eval "var$c=$file";
    c=$((c+1));
done

このコードは、var0、var1、var2、...という名前の変数を作成し、それぞれにファイル名を保持します。私はあなたが配列を使用してそれをやりたいと思う十分な理由があると思います...


5

可能性あなたは配列を意味します。値を割り当てるにはいくつかの方法があります

最初:

c=0
for file in $( ls ); do
    var[$c]="$file";
    c=$(($c+1));
done

第二:

c=0
for file in $( ls ); do
    var[c++]="$file";
done

三番:

for file in $( ls ); do
    var[${#var}]="$file";
done

第4:

var=( $(ls) )

第五

...

  1. を使用する必要はなく、すべてのファイルにls配置*するだけです
  2. 看板の中[]$省略できます

ありがとうございました; 私の質問は、実際に実用的であるよりも、潜在的に理論的です。ただし、echo $var上記にリストしたコマンドを使用すると、最初のファイルのみが「リスト」されlsます。私は何か間違ったことをしていますか?
toxefa

1
使用する必要があるすべての配列を出力する場合echo ${var[*]}(または${var[@]})、単一の要素をのように呼び出すことができますecho ${var[1]}。注:$var等しい${var[0]}
コスタ2015

1
@ py4on他の方法はループの使用です:for v in "${var[@]}";do echo $v;done
Costas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.