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

AIX (KSH) Dynamic Variable Assignment — разделение длинной строки на несколько строк и назначение каждой строки переменной

Как в AIX (Korn Shell) добиться создания и назначения имен динамических переменных?

У меня в основном есть строка как «LINE 1 LINE 2 LINE 3 LINE 4 LINE 5», и я хочу, чтобы эта длинная строка была разделена на несколько строк (каждая длиной 7 символов) и назначала их динамически генерируемым переменным, таким как msg_txt_line_1, msg_txt_line_2 и так далее. на.

Я искал информацию в Интернете и использовал некоторую помощь из Создание имен динамических переменных в KornShell Пока я построил этот фрагмент, но он выдает ошибки.

foo.sh

TEXT='LINE 1 LINE 2 LINE 3 LINE 4 LINE 5'
counter=1
echo $TEXT | fmt -7 | while read line ; do eval msg_txt_line_$counter=$line;counter=$(( counter += 1 )) ; done
echo $msg_txt_line_1
echo $msg_txt_line_2
echo $msg_txt_line_3
echo $msg_txt_line_4
echo $msg_txt_line_5

Ошибка

AIX:>foo.sh
foo.sh[4]: 1:  not found.
foo.sh[4]: 2:  not found.
foo.sh[4]: 3:  not found.
foo.sh[4]: 4:  not found.
foo.sh[4]: 5:  not found.

Спасибо за ваше руководство.


Я работал над этим, и с учетом комментариев JS мне удалось написать следующий скрипт, который отлично работает. Однако это все еще можно улучшить, например, если длинная строка содержит такие символы, как `, ", ' и специальные символы оболочки? Буду признателен, если кто-нибудь поможет мне улучшить этот фрагмент.

x=1
TEXT="No one is going to hand me success. I must go out & get it myself. That's why I'm here. To dominate. To conquer. Both the world, and myself."
echo "$TEXT" | fmt -30 | while IFS=$'\n' read -r line; do export msg_txt_line_$x="$line"; let "x=x+1";done
echo "$msg_txt_line_1"
echo "$msg_txt_line_2"
echo "$msg_txt_line_3"
echo "$msg_txt_line_4"
echo "$msg_txt_line_5"
24.06.2013

Ответы:


1

Вы можете создать массив, а затем присвоить значения. Что-то типа:

$ TEXT='LINE 1 LINE 2 LINE 3 LINE 4 LINE 5'
$ echo "$TEXT" | fmt -w7 > myfile
$ while IFS=$'\n' read -r line; do export msg_txt_line_$((++x))="$line"; done <myfile
$ echo "$msg_txt_line_1"
LINE 1 

Обновлять:

$ TEXT='LINE 1 LINE 2 LINE 3 LINE 4 LINE 5'
$ echo "$TEXT" | fmt -w7 > myfile
$ while IFS=$'\n' read -r line; do export msg_txt_line_$((++x))="$line"; done <myfile
$ echo "$msg_txt_line_1"
LINE 1
25.06.2013
  • Спасибо JS, но он не работает с этой ошибкой. . . В какой оболочке вы выполняли свои команды? › [/home/u0012734] › TEXT='LINE 1 LINE 2 LINE 3 LINE 4 LINE 5' › [/home/u0012734] › IFS=$'\n' › [/home/u0012734] › array=($( fmt -7 ‹‹‹ $TEXT)) › ksh: 0403-057 Синтаксическая ошибка: `(' не ожидается. 25.06.2013
  • Я выполнил команды в ksh, хотя это было сделано на Mac, так как у меня нет коробки AIX для тестирования. 25.06.2013
  • Попробуйте сделать arry=( `fmt -7 <<< "TEXT"` ) вместо array=($(fmt -7 <<< "$TEXT")). Убедитесь, что IFS=$'\n' находится в той же строке, а не в другой. 25.06.2013
  • Я все еще получаю ту же ошибку... [/home/u0012734] › IFS=$'\n' arry=( fmt -7 <<< "TEXT" ) ksh: 0403-057 Синтаксическая ошибка: `(' не ожидается. 25.06.2013
  • Какую версию ты используешь? Вы можете сделать ksh --version? 25.06.2013
  • @Guddu Попробуйте новое решение. 25.06.2013
  • Спасибо JS, но он все еще не работает. dpaste.com/1269801 содержит стенограмму сеанса. 25.06.2013
  • давайте продолжим это обсуждение в чате 25.06.2013
  • Привет ЖС. . . Небольшое изменение вашего ответа отлично сработало для меня. Я обновил исходный пост своим фрагментом. Я уверен, что его еще можно улучшить. Например. будет ли этот код работать со специальными символами, такими как ` или или ' в тексте сообщения? 25.06.2013
  • AIX имеет две версии ksh. Сейчас я не могу вспомнить их имена. Сделайте: ls /usr/bin/ksh* и вы увидите. Я думаю, что номер с номером больше соответствует тому, что есть у Mac. 25.06.2013
  • Новые материалы

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

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

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

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

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

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

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


    © 2024 nano-hash.ru, Nano Hash - криптовалюты, майнинг, программирование