2016-05-03 14 views
0

私はいくつかの提案をすることができますが、これはもっともエレガントな方法ではないかもしれませんが、それは思い浮かぶものです。わかりやすくするためにいくつかのスニペットを追加してみましょう。変数を呼び出す文字列を作成する

week1="01-\(04\|05\|06\|07\|08\|09\|10\)-2016" 
week2="01-\(11\|12\|13\|14\|15\|16\|17\)-2016" 
week3="01-\(18\|19\|20\|21\|22\|23\|24\)-2016" 
week4="01-\(25\|26\|27\|28\|29\|30\|31\)-2016" 
week5="02-\(01\|02\|03\|04\|05\|06\|07\)-2016" 

私は例

293232343;01-02-2016;blah;more blah 
234872348;02-01-2016;blah;extra blah 

のために私はカレンダーの週に応じて、異なるデータをつかむことができるようにループを作成しようとしています、各ラインの日付を持つテキストファイルを持っています。

current_week=`date +%W` 
for ((c=1; c<=$current_week; c++)) 
    do 
     sort -k2 archive.txt|tr "\\t" ";"|grep $week$c|while read line; do 

私の問題は、$ week $ cは$ week1、$ week2などに実際には変換されないということです。前もって感謝します。 man bashから

答えて

0

パラメータの最初の文字が感嘆符である場合、変数間接を導入し のレベル。 Bashは変数の名前として残りのパラメータから形成された変数の値を使用します。 この変数が次に展開され、その値はパラメータ自体の値ではなく、 の残りの部分で使用されます。これは間接的な拡張と呼ばれる です。これに対する例外は、以下で説明する$ {!prefix *}および$ {!name [@]}の展開 です。感嘆符 は、内扉を導入するために左の中括弧の直後に置かなければなりません - 。

その後、何が必要私はその前に使用したことがない

var="week$c" 
... grep "${!var}" ... 
+0

ですので、そのために非常に多くをありがとう! – h8t4nk

関連する問題