BusyBoxが提供するツールのみを使用して、Ash Shellで文字列を分割しようとしています。
文字列の形式はありますが、host-name:port,host-name2:port2
最初のホスト名とポートにのみ興味があるので、変数としてアクセスしたいと思います。
ここで見つけたオプションのいくつかを試しましたが、ほとんどはbashに関連しており、同等のコマンド/関数はashシェルには存在しないようです。
どんなアイデアがありますか?
ベストアンサー1
多くの副作用と制限があるIFSソリューションに加えて、空白、改行、空のフィールド、および複数文字の除数を正しく処理するシェルに拘束されない(多くのシェルの場合)ソリューションは次のとおりです。
#!/bin/sh
in='One-XX-X-17.0.0'
a=$in; div='-'; set --
while
b=${a#*"$div"}
set -- "$@" "${a%%"$div"*}"
[ "$a" != "$b" ]
do
a=$b
done
printf 'Element: %s\n' "$@"
#split 17.0.0 into NUM
a=$4; div='.'; set --
while
b=${a#*"$div"}
set -- "$@" "${a%%"$div"*}"
[ "$a" != "$b" ]
do
a=$b
done
printf 'Num: %s\n' "$@"
以下を印刷します。
$ ./script
Element: One
Element: XX
Element: X
Element: 17.0.0
Num: 17
Num: 0
Num: 0