Вопрос по bash – Изменить переменные в Bash

9

Как мне изменить эту переменную?

<code>max=0;
min=20000000;
cat |while read
do
    read a
    if [[ $a -gt $max ]]
    then
        max=a`
    fi
    `if [[ $a -lt $min ]]
    then
        min=a
    fi
done
echo $max 
echo $min
</code>

Мои мин и макс все те же, 0 и 2000000. Кто-нибудь может мне помочь с этим? Я понятия не имею.

Что должно бытьmin если все значения больше, чем 20000000? я думаю чтоmin а такжеmax должно быть вашей первой ценностью ... Luc M
такжеmax=a должно бытьmax=$aто же самое сmin=a должно бытьmin=$a Andrew Brock
Для тех из нас, кто пропустил ваш предыдущий вопрос, вы можете предоставить больше информации по этому вопросу. Какой вар вы пытаетесь изменить? Andrew Brock
Возможный дубликатA variable modified inside a while loop is not remembered melpomene

Ваш Ответ

1   ответ
21

min а такжеmax происходит в подоболочке, а не в вашей основной оболочке. Таким образом, изменения не видны после завершения конвейера.

Другой способ заключается в том, что вы вызываете read дважды - это может быть полезно, если вы хотите пропустить все остальные строки, но это немного необычно.

Последнее, чтоmin=a наборыmin вa, в прямом смысле. Вы хотите установить его$a.

С помощьюпроцесс замены чтобы избавиться от первой проблемы, удалив (возможно) ненужное второе чтение и исправив назначения, ваш код должен выглядеть так:

max=0
min=20000000
while read a
do
    if [[ $a -gt $max ]]
    then
        max=$a
    fi
    if [[ $a -lt $min ]]
    then
        min=$a
    fi
done < <(cat)    # careful with the syntax
echo $max 
echo $min
@userunknown: я предположил, что это было результатом борьбы с редактором уценки, отсутствующим в коде :)
ааааа Спасибо, теперь я понимаю это. Спасибо :) pkruk
В Bash (и Ksh и Zsh) я рекомендую эту форму:if (( a > max )), Кроме того, еслиcat не является заполнителем для чего-то другого, тогда можно полностью исключить перенаправление и подстановку процесса, так как скрипт будет читать изstdin по умолчанию в любом случае.
Четвертая проблема: немотивированные кавычки в середине сценария, не объясняемые ошибкой новичка. :)

Похожие вопросы