echo $i
печатает значение за переменной i
и новой строкой . Вы хотите напечатать новую строку после всех чисел. Используйте переключатель -n
.
num=4 ##Assume num is given by user##
for ((i = 1; i <= num; i++))
do
for ((j = 1; j <= i; j++))
do
echo -n "$i "
done
echo
echo
done
Или printf:
num=4 ##Assume num is given by user##
for ((i = 1; i <= num; i++))
do
for ((j = 1; j <= i; j++))
do
printf "%s " "$i"
done
printf "\n\n"
done
- Не забудьте указать свои переменные (
echo "$i"
, а не echo $i
)
- Нет необходимости использовать
$num
внутри (( .. ))
. Все имена расширяются автоматически.
@ редактировать
При повторном рассмотрении вопроса я предложил следующий oneliner с той же функциональностью:
num=4
seq 1 "$num" | xargs -n1 seq -s ' ' 1
seq 1 "$num"
генерирует числа 1 2 .... $ num, разделенные символами новой строки
- Затем для каждого числа
xargs
выполняется seq -s ' ' 1 <number>
, генерируя 1 .. число для каждого числа, разделенного пробелами
- Вы можете вставить двойные символы новой строки с
| sed 's/$/\n/'
, если необходимо.