Как в 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"
ksh
, хотя это было сделано на Mac, так как у меня нет коробки AIX для тестирования. 25.06.2013arry=( `fmt -7 <<< "TEXT"` )
вместоarray=($(fmt -7 <<< "$TEXT"))
. Убедитесь, чтоIFS=$'\n'
находится в той же строке, а не в другой. 25.06.2013fmt -7 <<< "TEXT"
) ksh: 0403-057 Синтаксическая ошибка: `(' не ожидается. 25.06.2013ksh --version
? 25.06.2013