1

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"
4

1 に答える 1

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
于 2013-06-25T03:03:57.313 に答える