far*_*d99 15 bash array string shell-script
我需要从一个字符串到一个数组,其中每个条目都是该字符串上的每个单词。例如,从以下开始:
VotePedro="Vote for Pedro"
Run Code Online (Sandbox Code Playgroud)
我需要数组:
Vote
For
Pedro
Run Code Online (Sandbox Code Playgroud)
然后我应该能够迭代为:
for i in "${votePedroArray[@]}"
do
## Do something
done
Run Code Online (Sandbox Code Playgroud)
air*_*hey 15
VotePedro="Vote for Pedro"
votePedroArray=(${VotePedro})
Run Code Online (Sandbox Code Playgroud)
解释:
数组通常使用括号声明。例如votePedroArray=("Vote" "For" "Pedro"),会给你一个长度为 3 的数组。${VotePedro}在这种情况下,它与 $VotePedro 相同。要访问单个数组元素,您可以使用类似于问题中 for 循环的括号。例如${votePedroArray[0]}是数组中的第一个元素(本例中的“投票”)
在bash和大多数其他类似 Bourne 的 shell 中,当您不加引号地保留变量扩展时,例如$VotePedro,将执行以下步骤:
IFS变量值中的字符;默认情况下,这是空格、制表符和换行符。因此,您可以IFS通过关闭通配符扩展并扩展其值为引号之外的字符串的变量,将字符串拆分为以空格分隔的元素(假设默认值为)。
VotePedro="Vote for Pedro"
set -f
votePedroArray=($VotePedro)
set +f
for i in "${votePedroArray[@]}"; do …
Run Code Online (Sandbox Code Playgroud)
可以直接在使用点进行拆分;这甚至可以在没有数组的 shell 中工作,例如 sh:
VotePedro="Vote for Pedro"
set -f
for i in ${votePedro}; do
set +f
…
done
set +f
Run Code Online (Sandbox Code Playgroud)