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

类似于:

for databaseName in listOfNames
then
  # Do something
end

当前回答

很惊讶还没有人发布这个消息——如果在遍历数组时需要元素的索引,可以这样做:

arr=(foo bar baz)

for i in ${!arr[@]}
do
    echo $i "${arr[i]}"
done

输出:

0 foo
1 bar
2 baz

我发现这比“传统”for循环样式(for((I=0;I<${#arr[@]};I++))要优雅得多。

(${!arr[@]}和$i不需要引用,因为它们只是数字;有些人会建议引用它们,但这只是个人偏好。)

其他回答

试试这个。它正在运行和测试。

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

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

简单方法:

arr=("sharlock"  "bomkesh"  "feluda" )  ##declare array

len=${#arr[*]}  # it returns the array length

#iterate with while loop
i=0
while [ $i -lt $len ]
do
    echo ${arr[$i]}
    i=$((i+1))
done


#iterate with for loop
for i in $arr
do
  echo $i
done

#iterate with splice
 echo ${arr[@]:0:3}

这些答案中没有一个包含计数器。。。

#!/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=0; i<${arraylength}; i++ ));
do
  echo "index: $i, value: ${array[$i]}"
done

输出:

index: 0, value: one
index: 1, value: two
index: 2, value: three

每个Bash脚本/会话的可能第一行:

say() { for line in "${@}" ; do printf "%s\n" "${line}" ; done ; }

使用例如:

$ aa=( 7 -4 -e ) ; say "${aa[@]}"
7
-4
-e

可以考虑:echo在此处将-e解释为选项

脚本或函数的隐式数组:

除了anubhava的正确答案:如果循环的基本语法是:

for var in "${arr[@]}" ;do ...$var... ;done

bash中有一个特殊情况:

当运行脚本或函数时,在命令行传递的参数将被分配给$@数组变量,您可以通过$1、$2、$3等进行访问。

可以通过以下方式填充(用于测试)

set -- arg1 arg2 arg3 ...

这个数组上的循环可以简单地写:

for item ;do
    echo "This is item: $item."
  done

请注意,中的保留工作不存在,也没有数组名称!

示例:

set -- arg1 arg2 arg3 ...
for item ;do
    echo "This is item: $item."
  done
This is item: arg1.
This is item: arg2.
This is item: arg3.
This is item: ....

注意,这与

for item in "$@";do
    echo "This is item: $item."
  done

然后进入脚本:

#!/bin/bash

for item ;do
    printf "Doing something with '%s'.\n" "$item"
  done

将其保存在脚本myscript.sh、chmod+x myscript.shh中,然后

./myscript.sh arg1 arg2 arg3 ...
Doing something with 'arg1'.
Doing something with 'arg2'.
Doing something with 'arg3'.
Doing something with '...'.

在函数中相同:

myfunc() { for item;do cat <<<"Working about '$item'."; done ; }

Then

myfunc item1 tiem2 time3
Working about 'item1'.
Working about 'tiem2'.
Working about 'time3'.