如何从bash中的列表中获取元素?

Spa*_*nST 49 linux bash

这是一个列表:

List = "abcd 1234 jvm something"
Run Code Online (Sandbox Code Playgroud)

如何在不循环所有列表的情况下获取第二个元素“1234”?

use*_*894 57

等号之间没有空格

$ List="abcd 1234 jvm something"
$ set -- $List
$ echo $2
1234
Run Code Online (Sandbox Code Playgroud)

其他一些方法,虽然不如使用 shell 的内部结构有效

$ 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
Run Code Online (Sandbox Code Playgroud)

  • @Spawn `set -- $something` 在 `$IFS` 字符(默认为空格)处拆分 `$something`,并将拆分的部分分配给位置变量 `$1`、`$2`、... (17认同)
  • 我的意思是第二行。 (2认同)

Ben*_*ier 56

只是为了补充 ghostdog 的回答:您还可以将$List的元素放入数组并从那里访问特定的列表元素

List="abcd 1234 jvm something"
arr=($List)
echo ${arr[1]}
Run Code Online (Sandbox Code Playgroud)

请注意,数组索引计数为 0,1,2,... 。

这样做的好处是不会用太多的新变量污染 shell 环境。