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


40

这是一个清单:

List = "abcd 1234 jvm something"

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

Answers:


50

等号之间没有空格

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

其他一些方法,尽管不如使用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

谢谢。您能在代码中给些意见吗?
SpawnST 2010年

1
我的意思是第二行。
SpawnST 2010年

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,...。

这样的优点是不会用太多新变量污染shell环境。



1
无需echoarr=($List)
user31894 2010年

@ghostdog可能是强迫行为,已编辑。
本杰明·班尼尔

@BenjaminBannier,如何选择多个元素。是否有类似$ {arr [1,2,3]} $的语法(自从我尝试过以来就没有,但是像这样)还是我需要使用for循环。
Kvothe
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.