灰色の殻で文字列を分割しますか? (忙しい箱)

灰色の殻で文字列を分割しますか? (忙しい箱)

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

おすすめ記事