Arrays Bash中的数组:显示数组的所有元素 echo“Enter N”#输入N表示循环的输入数量 读N#读N #使用c型循环 对于((i=1;i

Arrays Bash中的数组:显示数组的所有元素 echo“Enter N”#输入N表示循环的输入数量 读N#读N #使用c型循环 对于((i=1;i,arrays,linux,bash,shell,Arrays,Linux,Bash,Shell,您继续使用read-a重新定义array。代码应该这样编写: echo "Enter N " # enter N for number of inputs for the loop read N # reading the N #using c-style loop for((i=1;i<=N;i++)) do read -a arr # arr is the

您继续使用
read-a
重新定义
array
。代码应该这样编写:

 echo "Enter N "   # enter N for number of inputs for the loop                                                         
 read N # reading the N
 #using c-style loop
 for((i=1;i<=N;i++))
 do
 read -a arr # arr is the name of the array
 done
 echo ${arr[*]} # 1 
 echo ${arr[@]} # 2   

您不断使用
read-a
重新定义
array
。代码应该这样编写:

 echo "Enter N "   # enter N for number of inputs for the loop                                                         
 read N # reading the N
 #using c-style loop
 for((i=1;i<=N;i++))
 do
 read -a arr # arr is the name of the array
 done
 echo ${arr[*]} # 1 
 echo ${arr[@]} # 2   

要能够在循环中填充数组,请使用:

$ bash ./dummy.sh 
Enter N 
2
3
4
3 4
3 4
完整代码:

arr+=("$var")
read-p'输入N:'N
arr=()#初始化数组
#循环N次并追加到数组中

对于((i=1;i)能够在循环使用中填充数组:

$ bash ./dummy.sh 
Enter N 
2
3
4
3 4
3 4
完整代码:

arr+=("$var")
read-p'输入N:'N
arr=()#初始化数组
#循环N次并追加到数组中
对于((i=1;i
您正在读取数组
arr
中的数据,并试图打印
array

您正在读取数组
arr
中的数据,并试图打印
array


两者都将显示内容。您还可以手动使用${array[@]}中的i使用
declare-p array
do echo$i;done
for((i=0;i<${array[@]};i++);do echo${array[$i]};done
(如果包含空格,您应该引用数组)但是,如果您试图在循环的单独行中输入值,您将只能读取最后一个元素。这两个元素都将显示内容。您还可以手动使用${array[@]}中的i使用
declare-p array
for i;do echo$i;done
for((i=0;i<${array[@]};i++);do echo${array[$i]};done
(如果包含空格,则应引用数组)但是,如果尝试在循环中的单独行中输入值,则只能读取最后一个元素。
echo
方法都有缺陷——尝试在数组中输入
*
作为值;您将看到两个元素都没有正确打印。
declare-p array
是最佳实践,如果明确的输出是顶级priority.
printf'%q\n'${array[@]}
是一种合理的折衷方法,因为它用常规shell引号转义的值一对一地打印每个条目;
printf'%s\0'${array[@]}
是为机器(而非人类)消费生成输出时的最佳做法,因为它会逐字地发出所有值,并用NUL分隔它们。(这特别不适合人类,因为终端不打印NUL)@StefanBecker Yes当我输入*作为输入时,它没有显示所需的输出。你能解释一下为什么会发生这种情况吗?
echo
方法都有缺陷——试着在数组中输入
*
作为值;你会发现没有一个正确地打印它。
declare-p array
是最好的做法,如果明确的输出是最高优先级。
printf'%q\n'${array[@]}
是一个合理的折衷方案,因为它使用常规shell引号转义的值一对一地打印每个条目;
printf'%s\0'${array[@]}
是为机器(非人工)生成输出时的最佳实践消费,因为它逐字逐句地发出所有值,并用NUL分隔它们。(这对人类尤其不合适,因为终端不打印NUL)。@StefanBecker是的,当我输入*作为输入时,它没有显示所需的输出。你能解释一下为什么会发生这种情况吗?