【问题标题】:Array in Bash: Displaying all elements of arrayBash中的数组:显示数组的所有元素
【发布时间】:2018-02-18 16:33:15
【问题描述】:
 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   

尝试了所有方法来显示数组的所有元素,但没有得到所需的输出。它显示数组的最后一个元素。

【问题讨论】:

  • 两者都会显示内容。您还可以使用declare -p arrayfor i in ${array[@]}; do echo $i; donefor ((i = 0; i &lt; ${#array[@]}; i++)); do echo ${array[$i]}; done(如果包含空格,则应引用数组)但是,如果您尝试使用循环在单独的行中输入值,则只会读取最后一个元素。

标签: arrays linux bash shell


【解决方案1】:

为了能够在循环使用中填充数组:

arr+=("$var")

完整代码:

read -p 'Enter N: ' N

arr=() # initialize an array

# loop N times and append into array
for((i=1;i<=N;i++)); do
   read a && arr+=("$a")
done

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      可能有更好的方法来做到这一点。我只是想展示如何修复您当前的代码。

      示例运行

      $ bash ./dummy.sh 
      Enter N 
      2
      3
      4
      3 4
      3 4
      

      【讨论】:

      • echo 方法都有问题——尝试在数组中输入* 作为值;你会看到没有一个人能正确打印出来。如果明确的输出是重中之重,declare -p array 是最佳实践。 printf '%q\n' "${array[@]}" 是一个合理的折衷方案,因为它会逐行打印每个条目,并使用常规 shell 引用转义的值; printf '%s\0' "${array[@]}" 是为机器(而非人类)消费生成输出时的最佳实践,因为它按字面意思发出所有值,并用 NUL 分隔它们。 (这特别不适合人类,因为终端不打印 NUL)。
      • @StefanBecker 是的,当我输入 * 作为输入时,它没有显示所需的输出。你能解释一下为什么会这样吗?
      【解决方案4】:

      希望这可以帮助有同样问题的其他人。

      在shell中显示数组的所有内容:

      "${arr[*]}"
      

      清理你的脚本(但不确定你的意图是什么):

      read -p "Enter N " N # User inputs the number of entries for the array
        ARR=() # Define empty array
        #using c-style loop
        for ((i=1;i<=N;i++))
        do
          read -p "Enter array element number $N: " ADD # Prompt user to add element
          ARR+=($ADD) # Actually add the new element to the array.
        done
      echo "${ARR[*]}" # Display all array contents in a line.
      

      我在@choroba 处找到了类似的解决方案:How to echo all values from array in bash

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-12
        • 2014-07-29
        • 2010-10-20
        • 1970-01-01
        • 2013-04-19
        • 2013-12-03
        • 1970-01-01
        相关资源
        最近更新 更多