在Bash中循环遍历字符串数组?

三世轮回 提交于 2020-01-07 04:06:17

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

我想编写一个通过15个字符串循环的脚本(可能是数组吗?)那可能吗?

就像是:

for databaseName in listOfNames
then
  # Do something
end

#1楼

该声明数组不适用于Korn shell。 将以下示例用于Korn shell:

promote_sla_chk_lst="cdi xlob"

set -A promote_arry $promote_sla_chk_lst

for i in ${promote_arry[*]};
    do
            echo $i
    done

#2楼

尝试这个。 它正在工作并经过测试。

for k in "${array[@]}"
do
    echo $k
done

# For accessing with the echo command: echo ${array[0]}, ${array[1]}

#3楼

本着与4ndrew的回答相同的精神:

listOfNames="RA
RB
R C
RD"

# To allow for other whitespace in the string:
# 1. add double quotes around the list variable, or
# 2. see the IFS note (under 'Side Notes')

for databaseName in "$listOfNames"   #  <-- Note: Added "" quotes.
do
  echo "$databaseName"  # (i.e. do action / processing of $databaseName here...)
done

# Outputs
# RA
# RB
# R C
# RD

B.名称中不能有空格:

listOfNames="RA
RB
R C
RD"

for databaseName in $listOfNames  # Note: No quotes
do
  echo "$databaseName"  # (i.e. do action / processing of $databaseName here...)
done

# Outputs
# RA
# RB
# R
# C
# RD

笔记

  1. 在第二个示例中,使用listOfNames="RA RB RC RD"具有相同的输出。

引入数据的其他方式包括:

从stdin读取

# line delimited (each databaseName is stored on a line)
while read databaseName
do
  echo "$databaseName"  # i.e. do action / processing of $databaseName here...
done # <<< or_another_input_method_here
  1. 可以在脚本中指定bash IFS “行分隔符” [ 1 ]分隔符,以允许其他空格(即IFS='\\n'或MacOS IFS='\\r'
  2. 我也喜欢接受的答案:)-我将这些摘要作为其他有用的方式也可以回答问题。
  3. 脚本文件顶部包含#!/bin/bash表示执行环境。
  4. 我花了几个月的时间弄清楚如何简单地编写此代码:)

其他来源( 读取循环时


#4楼

您可以使用${arrayName[@]}的语法

#!/bin/bash
# declare an array called files, that contains 3 values
files=( "/etc/passwd" "/etc/group" "/etc/hosts" )
for i in "${files[@]}"
do
    echo "$i"
done

#5楼

这些答案都没有包含计数器...

#!/bin/bash
## declare an array variable
declare -a array=("one" "two" "three")

# get length of an array
arraylength=${#array[@]}

# use for loop to read all values and indexes
for (( i=1; i<${arraylength}+1; i++ ));
do
  echo $i " / " ${arraylength} " : " ${array[$i-1]}
done

输出:

1  /  3  :  one
2  /  3  :  two
3  /  3  :  three
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!