How to use an array in ash?

For some reason I can’t use bash to build my script, the only way to do it is with ash , I have this sms auto responder script, each answer should be max 160 characters longer, it looks like this:

 #!/bin/sh reply="this is a reply message that contains so many words so I have to split it to some parts" array="${reply:0:5} ${reply:5:5} ${reply:10:5} ${reply:15:5} ${reply:20:5}" for i in $array do echo "send sms with the message: $i" done 

but it ends as follows:

 send sms with the message: this send sms with the message: is send sms with the message: a send sms with the message: reply send sms with the message: mess send sms with the message: age send sms with the message: t 

I want something like this:

 send sms with the message: this send sms with the message: is a send sms with the message: reply send sms with the message: messa send sms with the message: ge th send sms with the message: at co send sms with the message: ntain 

So, it is broken down by the number of characters instead of being split by words, how can I do this?

+5
source share
1 answer

Your array is not an array, but read http://mywiki.wooledge.org/WordSplitting for more information about this.

ash does not support arrays, but you can get around this using set :

 reply="this is a reply message that contains so many words so I have to split it to some parts" set -- "${reply:0:5}" "${reply:5:5}" "${reply:10:5}" "${reply:15:5}" "${reply:20:5}" for i; do echo "send sms with the message: $i" done 

-

 send sms with the message: this send sms with the message: is a send sms with the message: reply send sms with the message: mess send sms with the message: age t 

There are many alternative solutions for this, here one of them uses fold to do the splitting work for you with the added benefit that it can be split into spaces to make messages more readable (see man fold for more details):

 reply="this is a reply message that contains so many words so I have to split it to some parts" echo "${reply}" | fold -w 10 -s | while IFS= read -ri; do echo "send sms with the message: $i" done 

-

 send sms with the message: this is a send sms with the message: reply send sms with the message: message send sms with the message: that send sms with the message: contains send sms with the message: so many send sms with the message: words so send sms with the message: I have to send sms with the message: split it send sms with the message: to some send sms with the message: parts 
+5
source

Source: https://habr.com/ru/post/1216254/


All Articles