2015-09-02 5 views
1

Я пытаюсь сделать цикл while в bash-скрипт, но я не знаю, что происходит с ed (текстовым редактором), когда я пытался вставить varible в свои аргументы. Как вы можете видеть, я также использую цикл, но проблема заключается в использовании varibles внутри команды ed.Как вставить переменную 2 в аргумент команды ed?

Вот код сценария (очевидно, что AWK и СЕПГ программы):

#!/bin/bash 

x=1 
y=5 

SCRIPTDIR=~/bin 

awk 'NR % 2==0' test > output1 
awk -v n=5 '1; NR % n == 0 {print ""}' output1 > output1b 
sed -i 's/\r//' output1b 

while [ $x -le 50 ]; do 
    ed -s output1b <<< $"$xm$y\nw" 
let x=x+5 
let y=y+5 
done 

ответ

4
ed -s output1b <<< $"$xm$y\nw" 

должен быть

ed -s output1b <<ED_COMMANDS 
${x}m$y 
w 
ED_COMMANDS 

или

printf "%s\n" "${x}m$y" "w" | ed -s output1b 

$"..." форма выиграл» t перевод \n, и форма $'...' не будет расширять переменные.

Кроме того, обратите внимание на фигурные скобки в ${x}m$y иначе оболочка ищет переменных $xm и $y

+0

Большое спасибо Гленн, второй вариант был хорош для меня. Я должен изучить руководство bash (цитаты, особые персонажи ....), но я начинаю. – git

+0

Хорошо прочитать раздел [quoting] (http://www.gnu.org/software/bash/manual/bashref.html#Quoting) и [перенаправления] (http://www.gnu.org/software /bash/manual/bashref.html#Redirections) (применимо здесь) и ознакомьтесь с порядком [расширений оболочки] (http://www.gnu.org/software/bash/manual/bashref.html#Shell- Расширения) –

+0

@glennjackman Я смотрю это более 5 часов, большое вам спасибо! –