2016-06-20 3 views
1

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

String1 
String2 
String3 
String4 
String5 

То, что я сделал до сих пор выглядит следующим образом, который не работает хорошо.

#!/bin/bash 
str_name='String' 
for i in `seq 1 5` 
do 
expr=$(($str_name + $i)) #this part is what I cannot deal with it. 
echo $expr 
done 

Благодаря

+0

_ "это не работает хорошо" _ - вы «Помогите парням здесь, сказав, что это не работает! f.e .: Сообщения об ошибках? Какой результат вы получаете? – Jeff

+1

'printf '% s \ n" "String" {1..5} '? – Cyrus

ответ

2

Что вы делаете, добавление переменных в арифметическом смысле. Вы хотите использовать следующее:

expr="${str_name}${i}" 

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

Чтобы перейти к более подробному описанию, $(...) выполняет что-либо между круглыми скобками в под-оболочке и возвращает результаты. Я не уверен, какой вывод вы получаете, когда эхом повторяете $expr, но я понял, что это сообщение об ошибке. Что-то вроде Command String + 1 cannot be found, но я действительно не знаю.

+1

Нет ошибок: здесь речь идет не о '$ (...)', а о '$ ((...))', что является арифметическим расширением, а не подстановкой команд. В случае OP 'String' не определено, поэтому в арифметике расширяется до' 0', поэтому расширение '$ expr' равно' 1', '2',' 3', '4',' 5' соответственно. –

+0

Он работал на то, что я хочу поблагодарить, это полезно. – Hesam

+0

Ты совершенно прав @gniourf_gniourf - не знаю, о чем я думал. Я отредактирую свой последний абзац. Не возражаете, если я добавлю свой комментарий к моему ответу, с атрибуцией? –

0

Вы даже не требуете эха в другой строке. попробуй это.

#!/bin/bash 
str_name='String' 
for i in `seq 1 5` 
do 
echo $str_name$i 
done 
0

Brace Расширение еще один способ, которым вы можете перемещаться по диапазону:

for i in {1..5}; do 
    printf "String%d\n" $i 
done 

Например:

$ for i in {1..5}; do printf "String%d\n" $i; done 
String1 
String2 
String3 
String4 
String5 
Смежные вопросы