2013-02-24 3 views
0

Может ли кто-нибудь сказать мне, почему это не работает?Использование sed с массивом

Temp=$(sed -n '/"${Arr[$index]}"/,/"${Arr[$((index+1))]}"/p' $Text); 

Он по-прежнему не работает. Я пытался сделать это:

index=0 
while [ "$index" -lt "$((Arr_LEN-1))" ]; do 
    Temp=$(sed -n "/${Arr[$index]}/,/${Arr[$((index+1))]}/p" $Text);  
    let "index++" 
done 
+0

Каков ожидаемый результат и что он делает вместо этого? – user000001

+0

Можете ли вы уточнить? Как именно «это не работает»? Сообщения об ошибках? Как мы можем его воспроизвести? –

+0

У меня было 2 проблемы: сначала я использовал одинарные кавычки, второй $ text указал на строку, а не файл, спасибо всем – Max

ответ

5

Поскольку sed сценарий в одинарные кавычки, что предотвращает все расширения:

вмещающих символов в одинарные кавычки сохраняет буквальное значение каждого символа в кавычках.

Изменение одиночные кавычки в двойные кавычки должны помочь хотя:

Ограждающие символов в двойных кавычках сохраняет буквальное значение всех символов в кавычках, за исключением $, `, \, и, когда расширение истории включено,!. Символы $ и `сохраняют свое особое значение в двойных кавычках.

+0

я отредактировал вопрос – Max

3

Потому что вы используете одинарные кавычки. Попробуйте:

Temp=$(sed -n "/${Arr[$index]}/,/${Arr[$((index+1))]}/p" $Text); 
+0

Я редактирую вопрос – Max

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