2012-03-02 4 views
1

Представьте, что вы должны создать много строк в файле все с тем же текстом для одной переменной, за исключением:Bash скрипт для создания текста в файле, используя аргументы

foo text $variable bar text 
foo text $variable bar text 
foo text $variable bar text 
... 

Я задавался вопросом, если это может быть сделано с помощью Баш скрипт передавая ему переменную в качестве аргумента:

./my_script '1' 
./my_script '2' 
./my_script '3' 

что бы произвести это:

foo text 1 bar text 
foo text 2 bar text 
foo text 3 bar text 

Любые предложения или примеры того, как это сделать?

+1

Мне кажется, что там может быть лучшим способом выразить в коде, что вы пытаетесь достичь. Кажется, много работы набрать N строк вызовов скрипту, чтобы создать N строк текста. Если это все, что вы хотите сделать, ваш my_script может просто сделать что-то вроде 'cat >> output.file" foo text $ 1 bar text ". Или вы можете лучше описать, что вы действительно можете хотеть (?) –

+0

Может ли это быть возможным решением? 'для i в {1..3}; do echo foo text $ i bar text; done' – Gandaro

ответ

1

Смотрите также http://tldp.org/LDP/abs/html/internalvariables.html#POSPARAMREF:

#!/bin/bash 

echo "foo text ${1} bar text" 
+0

{} не требуется. – jordanm

+0

Нет ничего плохого в немного большей ясности. – Sorpigal

+0

@jordanm Вы правы. Это не обязательно. Но я стараюсь привыкнуть всегда использовать $ {VARIABLENAME}. IMHO улучшает читаемость и предотвращает труднодоступные ошибки. – sgibb

0

Это будет зависеть от того, как вы получаете текст «foo text» и «bar text». Если он установлен статически:

var="foo text $1 bar text" 
echo "$var" 

Или, если он находится в отдельных переменных, которые вы можете объединить их:

foo="foo text" 
bar="bar text" 
output="$foo $1 $bar" 
echo "$output" 
1

Это слишком тривиальная задача написать сценарий для.

Вот несколько возможных решений:

for ((variable=1; variable<10; ++variable)); do 
    echo foo text $variable bar text 
done 

или ...

for name in Dave Susan Peter Paul; do 
    echo "Did you know that $name is coming to my party?" 
done 
1

Это может работать для вас:

printf "foo text %d bar text\n" {1..10} 
foo text 1 bar text 
foo text 2 bar text 
foo text 3 bar text 
foo text 4 bar text 
foo text 5 bar text 
foo text 6 bar text 
foo text 7 bar text 
foo text 8 bar text 
foo text 9 bar text 
foo text 10 bar text 

или это:

printf "foo text %s bar text\n" foo bar baz 
foo text foo bar text 
foo text bar bar text 
foo text baz bar text 
1

Предполагая, что вы застряли с этим дрянным файлом шаблон:

perl -pe 'BEGIN {$count=0} s/\$variable/ ++$count /ge' file 
+0

Отлично, именно то, что я искал: D – Bamboomy

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