Целочисленное дополнение в оболочке - программирование
Подтвердить что ты не робот

Целочисленное дополнение в оболочке

Вот мой простой код оболочки. Я хочу, чтобы результат был 2.Shell рассматривает все как строку. Как я могу это сделать?

num=1
num=$(( $num + 1 ))

ИЗМЕНИТЬ:

Полный код: что не так, если я хочу печатать от 1 до 10?

#! /bin/bash

num=1
until test $num -eq 10
do
    num=$(( $num + 1 ))
    echo $num
done
4b9b3361

Ответ 2

@tonio; пожалуйста, не защищайте использование подоболочки (`... или $(...)) строит, когда они не нужны (чтобы не допустить путаницы до максимума, $((...)) не является конструкцией подколла). Sub-shells может сделать потрясающую производительность даже при довольно тривиальных объемах данных. То же самое верно для каждого места, где внешняя программа используется, чтобы сделать что-то, что можно сделать с помощью встроенного блока.

Пример:

    num=1
    time while [[ $num -lt 10000 ]]; do
            num=$(( num+1 ))
    done
    echo $num
    num=1
    time while /bin/test $num -lt 10000; do
            num=$( /bin/expr $num + 1 )
    done
    echo $num

Выход (выполняется в ksh в Linux):

real    0m0.04s
user    0m0.04s
sys     0m0.01s
10000

real    0m20.32s
user    0m2.23s
sys     0m2.92s
10000

... так что коэффициент времени выполнения равен 250, а коэффициент времени процессора - 100. Я признаю, что пример, который я использовал, был преувеличенным, явно требуя, чтобы все встроенные модули были обойдены, но я думаю, что точка была Сделано: создание новых процессов расширилось, избегайте их, когда сможете, и узнайте, что ваша оболочка распознает, где создаются новые процессы.

Ответ 3

Вы только что сделали:

$ num=1; num=$(( $num + 1 ));echo $num
2

Примечание. Вам не нужно указывать переменные внутри $(( )). Кроме того, вы можете просто использовать $((num++))

Ответ 4

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

num=1; ((num++)); echo $num
2

или

num=1; echo $((++num))
2

для циклов

for num in {1..10}; do echo $num; done

или (в bash как минимум)

for ((num=1; num<=10; num++)) { echo $num; }

второй цикл более полезен при использовании большего количества программ:

for (( num=1,mun=10; num<=10; num++,mun--)) { echo $num $mun; }

Ответ 5

попробуйте это

$ num=1; num=`expr $num + 1`; echo $num;

Ответ 6

Используйте ((num++)) как стенографию для увеличения num.

$ num=1
$ ((num++))
$ echo $num
2

Ответ 7

Вы не указали, какую оболочку используете, но самая краткая форма, которую я знаю, - это эта (работает хотя бы в bash):

num=$[num+1]

Если только увеличение на единицу и изменение самой переменной, а не печать/назначение, то:

((num++))

Это лучшее/более элегантное решение. См. Ответ собаки для этого.

Если зацикливание над значениями, я бы использовал эту форму вместо:

for i in `seq 1 10`; do
   echo $i
done

Ответ 8

работает для меня

$ num=1
$ num=$(( $num + 1 ))
$ echo $num
2

Какой результат вы получаете?

Подробнее о bash Арифметика @tldp

ИЗМЕНИТЬ

Чтобы сделать что-то 10 раз в bash, вы можете использовать (используя brace-expansion}

$ for i in {1..10}; do echo $i; done
1
2
3
4
5
6
7
8
9
10

Однако вы не можете использовать переменные между {}. Если это так, используйте seq.

Ответ 9

Вы можете использовать что-то вроде:

num=1
num=`expr $num + 1`

Он также будет работать с оболочками bash, такими как ksh.