bashのリストから要素を取得する方法は?


40

リストは次のとおりです。

List = "abcd 1234 jvm something"

すべてのリストをループせずに2番目の要素「1234」を取得する方法は?

回答:


50

等号の間にスペースがない

$ List="abcd 1234 jvm something"
$ set -- $List
$ echo $2
1234

シェルの内部を使用するほど効率的ではありませんが、いくつかの他の方法

$ echo $List | cut -d" " -f2
1234
$  echo $List | awk '{print $2}'
1234
$ echo $List | sed 's/^.[^ \t]* //;s/ .*//'
1234
$ echo $List | tr " " "\n"|sed -n '2p'
1234

ありがとう。コードにコメントをお願いします。
SpawnST

1
2行目です。
SpawnST

17
@Spawn set -- $something分割$something$IFS(デフォルトスペースで)文字と位置変数に分割された部品を割り当て$1$2...、
ベンジャミンBannier

43

ghostdogの答えを補うために:$Listの要素を配列に入れて、そこから特定のリスト要素にアクセスすることもできます

List="abcd 1234 jvm something"
arr=($List)
echo ${arr[1]}

配列インデックスは0,1,2、...としてカウントされることに注意してください。

これには、シェル環境をあまりにも多くの新しい変数で汚染しないという利点があります。


それはいいです。:-)
SpawnST

1
する必要はありませんechoarr=($List)
user31894

@ghostdogはおそらく強迫行動であり、編集されています。
ベンジャミンバニエ

@BenjaminBannier、どうすれば複数の要素を選択できますか。$ {arr [1,2,3]} $のような構文はありますか(試したのでこれではなく、このようになっています)、またはforループを使用する必要がありますか。
クボテ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.