我正在构建一个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
),我会怎么做?
谢谢!
for element in "${geekletArray[@]}"
do
echo "$element"
done
明智地使用引号将保护您免受不必要的单词拆分。
引用数组可能会令人困惑。 您可以通过迭代数组索引来完全回避此问题。
有很多方法可以从生成的字符串中提取 id 值。 我假设它将始终是空格分隔字符串的最后一部分。 因此,我正在使用 bash 参数扩展来有效地删除模式的所有出现*
for index in ${!geekletArray[@]}
do
echo "${geekletArray[$index]}" # entire element
echo "${geekletArray[$index]##* }" # id value only
done