2016-05-03 2 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 

Моя проблема в том, что $ неделя $ с не реально перевести на $ week1, $ week2 и т.д. Любые простые решения здесь? Заранее спасибо.

ответ

0

От man bash:

Если первый символ параметра восклицательный знак, уровень из вводится переменная косвенности. Bash использует значение var- , которое может быть сформировано из остальной части параметра в качестве имени переменной; эта переменная затем расширяется, и это значение используется в остальной части вместо замены самого параметра. Это , известный как косвенное расширение. Исключением являются расширения $ {! Prefix *} и $ {! Name [@]}, описанные ниже. Восклицательный знак должен немедленно следовать за левой скобой, чтобы ввести indirec- .

Тогда, что вам нужно, это

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

Я никогда не использовал это раньше, спасибо большое за это! – h8t4nk

Смежные вопросы