如何在灰中使用数组?
How to use array in ash?
出于某种原因,我无法使用 bash
构建我的脚本,唯一的方法是使用 ash
,我有这个短信自动回复脚本,每个回复都必须最多 160 个字符长,它看起来像这样:
#!/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
但结果是这样的:
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
我想要的是这样的:
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
所以它按字符数拆分而不是按单词拆分,我该怎么做?
您的数组实际上不是数组,但阅读 http://mywiki.wooledge.org/WordSplitting 了解更多信息。
ash
本身不支持数组,但您可以使用 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
对此有许多替代解决方案,其中之一是使用 fold
为您完成拆分工作,其额外优势是它可以在空格处打断以使消息更具可读性(请参阅man fold
了解更多信息):
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 -r i; 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
出于某种原因,我无法使用 bash
构建我的脚本,唯一的方法是使用 ash
,我有这个短信自动回复脚本,每个回复都必须最多 160 个字符长,它看起来像这样:
#!/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
但结果是这样的:
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
我想要的是这样的:
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
所以它按字符数拆分而不是按单词拆分,我该怎么做?
您的数组实际上不是数组,但阅读 http://mywiki.wooledge.org/WordSplitting 了解更多信息。
ash
本身不支持数组,但您可以使用 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
对此有许多替代解决方案,其中之一是使用 fold
为您完成拆分工作,其额外优势是它可以在空格处打断以使消息更具可读性(请参阅man fold
了解更多信息):
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 -r i; 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