在 bash 中解析数组时出现奇怪的结果



我正在构建一个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

相关内容

  • 没有找到相关文章

最新更新