我正在构建一个bash脚本,它从GeekTool获取信息并解析结果。到目前为止,脚本看起来像这样:
1 #!/bin/bash
2
3 clear
4
5 geeklets=`osascript <<TEXT
6 Tell Application "GeekTool Helper"
7 geeklets
8 End Tell
9 TEXT`
10
11 IFS="," read -a geekletArray <<< "$geeklets"
12
13 echo "First Element in Array:"
14 echo ${geekletArray[0]}
15
16 echo ""
17
18 echo "All Array Elements:"
19 for element in ${geekletArray[@]}
20 do
21 echo $element
22 done
在第14行,我回显出返回的数组的第一个元素:
shell geeklet id 49610161-0A3C-49C6-9626-694370DE3101
但是在遍历数组的循环的第一次迭代(第21行)中,第一个元素数组返回如下:
shell
geeklet
id
49610161-0A3C-49C6-9626-694370DE3101
在循环中,元素以换行符分隔列表的形式返回。
为什么会有区别?另外,如果我只想获取数组的id值(例如49610161-0A3C-49C6-9626-694370DE3101
),我该如何处理呢?
谢谢!
答案 0 :(得分:3)
for element in "${geekletArray[@]}"
do
echo "$element"
done
明智地使用引号可以保护您免受不受欢迎的单词分裂。
答案 1 :(得分:2)
引用数组可能会令人困惑。您可以通过迭代数组索引来完全回避问题。
有很多方法可以从结果字符串中提取id值。我假设它将始终是以空格分隔的字符串的最后一部分。因此,我使用bash parameter expansion来有效删除所有出现的pattern *
for index in ${!geekletArray[@]}
do
echo "${geekletArray[$index]}" # entire element
echo "${geekletArray[$index]##* }" # id value only
done