Nano Hash - криптовалюты, майнинг, программирование

Для цикла в Unix

Я новичок в программировании под Unix и не могу понять, что не так с этим кодом:

#!/bin/sh
    i=1
    max=10
        for i in {1..$max}
        do
            echo $i;
        done

Если я попробую приведенный выше код, он будет работать:

#!/bin/sh
    i=1
    max=10
        for i in {1..10}
        do
            echo $i;
        done

Я пробовал это:

#!/bin/sh
    i=1
    max=10
        for i in {1..`echo $max`}
        do
            echo $i;
        done

и

#!/bin/sh
    i=1
    max=10
        for i in {1..`expr $max`}
        do
            echo $i;
        done

и

#!/bin/sh
    i=1
    max=10
        for i in {1..`echo $max | bc`}
        do
            echo $i;
        done

Но тоже не работает .. Может кто подскажет, как получится ..?

26.07.2013

Ответы:


1

Может ты можешь попробовать это

#!/bin/sh
max=10
for i in $(seq 1 $max)
do
    echo "$i"
done

Вы можете увидеть этот ответ

фигурная скобка, {x..y} выполняется перед другими расширениями, поэтому вы не можете использовать это для последовательностей переменной длины.

Обновлять:

Если вам нужна последовательность настраиваемого приращения, справочная страница seq дает следующее:

seq [-w] [-f format] [-s string] [-t string] [first [incr]] last

Следовательно, вы можете использовать seq 1 3 $max, чтобы получить последовательность с шагом 3.

В целом,

#!/bin/sh
max=10
incr=3
for i in $(seq 1 $incr $max)
do
    echo "$i"
done
26.07.2013
  • Это медленно по сравнению со встроенной командой. Смотрите мой ответ. 06.08.2013

  • 2

    Bash / zsh поддерживает гораздо более быструю и гибкую форму:

    for ((i=1; i<$max; ++i));
    

    Не используйте внешние команды (например, seq) или обратные кавычки - это замедлит ваш скрипт.

    26.07.2013

    3

    Выражения последовательности в форме {x..y} имеют место только тогда, когда x и y являются буквальными числами или одиночными символами. Это происходит до расширения переменной. Если ограничения могут включать переменные, используйте команду seq:

    for i in $(seq 1 $max)
    
    26.07.2013

    4

    На странице руководства bash говорится следующее:

    Раскрытие скобок выполняется перед любыми другими расширениями, и в результате сохраняются все символы, относящиеся к другим расширениям. Он строго текстовый. Bash не применяет синтаксической интерпретации к контексту раскрытия или тексту между фигурными скобками.

    Получается, что bash просто дословно передает любой текст в фигурных скобках. Я не был знаком с этим синтаксисом, и мне пришлось его поискать. Не похоже, что он был предназначен для использования в циклах for.

    В bash есть новые способы сделать это, но традиционный способ

    for i in $(seq 1 $max)
    do
     # whatever...
    done
    

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

    for i in $(eval echo {1..$max})
    do
     echo $i
    done
    
    26.07.2013
  • Это eval не нужно. 29.07.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..