Arrays in unix shell?

匿名 (未验证) 提交于 2019-12-03 02:13:02

问题:

How do I create an array in unix shell scripting?

回答1:

The following code creates and prints an array of strings in shell:

#!/bin/bash array=( "A" "B" "ElementC" "ElementE" ) for element in ${array[@]} do     echo $element done  echo "" echo "Nbr of elements:" ${#array[@]}  echo "" echo ${array[@]} 

Result:

A B ElementC ElementE  Nbr of elements: 4  A B ElementC ElementE 


回答2:

in bash, you create array like this

arr=(one two three) 

to call the elements

$ echo ${arr[0]} one $ echo ${arr[2]} three 

to ask for user input, you can use read

read -p "Enter your choice: " choice 

is that what you are asking for.?



回答3:

Bourne shell doesn't support arrays. However, there are two ways to handle the issue.

Use positional shell parameters $1, $2, etc.:

$ set one two three $ echo $* one two three $ echo $# 3 $ echo $2 two 

Use variable evaluations:

$ n=1 ; eval a$n="one"  $ n=2 ; eval a$n="two"  $ n=3 ; eval a$n="three" $ n=2 $ eval echo \$a$n two 


回答4:

#!/bin/bash  # define a array, space to separate every item foo=(foo1 foo2)  # access echo ${foo[1]}  # add or changes foo[0]=bar foo[2]=cat foo[1000]=also_OK 

You can read the ABS "Advanced Bash-Scripting Guide"



回答5:

Try this :

echo "Find the Largest Number and Smallest Number of a given number" echo "---------------------------------------------------------------------------------" echo "Enter the number" read n  while [ $n -gt 0 ] #For Seperating digits and Stored into array "x" do         x[$i]=`expr $n % 10`         n=`expr $n / 10` done  echo "Array values ${x[@]}"  # For displaying array elements   len=${#x[*]}  # it returns the array length   for (( i=0; i<len; i++ ))    # For Sorting array elements using Bubble sort do     for (( j=i+1; j<len;  j++ ))     do         if [ `echo "${x[$i]} > ${x[$j]}"|bc` ]         then                 t=${x[$i]}                 t=${x[$i]}                 x[$i]=${x[$j]}                 x[$j]=$t         fi         done done   echo "Array values ${x[*]}"  # Displaying of Sorted Array   for (( i=len-1; i>=0; i-- ))  # Form largest number do    a=`echo $a \* 10 + ${x[$i]}|bc` done  echo "Largest Number is : $a"  l=$a  #Largest number  s=0 while [ $a -gt 0 ]  # Reversing of number, We get Smallest number do         r=`expr $a % 10`         s=`echo "$s * 10 + $r"|bc`         a=`expr $a / 10` done echo "Smallest Number is : $s" #Smallest Number  echo "Difference between Largest number and Smallest number" echo "==========================================" Diff=`expr $l - $s` echo "Result is : $Diff"   echo "If you try it, We can get it" 


回答6:

The Bourne shell and C shell don't have arrays, IIRC.

In addition to what others have said, in Bash you can get the number of elements in an array as follows:

elements=${#arrayname[@]} 

and do slice-style operations:

arrayname=(apple banana cherry) echo ${arrayname[@]:1}                   # yields "banana cherry" echo ${arrayname[@]: -1}                 # yields "cherry" echo ${arrayname[${#arrayname[@]}-1]}    # yields "cherry" echo ${arrayname[@]:0:2}                 # yields "apple banana" echo ${arrayname[@]:1:1}                 # yields "banana" 


回答7:

Your question asks about "unix shell scripting", but is tagged bash. Those are two different answers.

The POSIX specification for shells does not have anything to say about arrays, as the original Bourne shell did not support them. Even today, on FreeBSD, Ubuntu Linux, and many other systems, /bin/sh does not have array support. So if you want your script to work in different Bourne-compatible shells, you shouldn't use them. Alternatively, if you are assuming a specific shell, then be sure to put its full name in the shebang line, e.g. #!/usr/bin/env bash.

If you are using bash or zsh, or a modern version of ksh, you can create an array like this:

myArray=(first "second element" 3rd) 

and access elements like this

$ echo "${myArray[1]}" second element 

You can get all the elements via "${myArray[@]}". You can use the slice notation ${array[@]:start:length} to restrict the portion of the array referenced, e.g. "${myArray[@]:1}" to leave off the first element.

The length of the array is ${#myArray[@]}. You can get a new array containing all the indexes from an existing array with "${!myArray[@]}".

Older versions of ksh before ksh93 also had arrays, but not the parenthesis-based notation, nor did they support slicing. You could create an array like this, though:

set -A myArray -- first "second element" 3rd  


回答8:

An array can be loaded in twoways.

set -A TEST_ARRAY alpha beta gamma 

or

X=0 # Initialize counter to zero. 

-- Load the array with the strings alpha, beta, and gamma

for ELEMENT in alpha gamma beta do     TEST_ARRAY[$X]=$ELEMENT     ((X = X + 1)) done 

Also, I think below information may help:

The shell supports one-dimensional arrays. The maximum number of array elements is 1,024. When an array is defined, it is automatically dimensioned to 1,024 elements. A one-dimensional array contains a sequence of array elements, which are like the boxcars connected together on a train track.

In case you want to access the array:

echo ${MY_ARRAY[2] # Show the third array element  gamma    echo ${MY_ARRAY[*] # Show all array elements -   alpha beta gamma   echo ${MY_ARRAY[@] # Show all array elements  -  alpha beta gamma   echo ${#MY_ARRAY[*]} # Show the total number of array elements -   3   echo ${#MY_ARRAY[@]} # Show the total number of array elements -   3  echo ${MY_ARRAY} # Show array element 0 (the first element) -  alpha 


回答9:

You can try of the following type :

#!/bin/bash  declare -a arr   i=0  j=0    for dir in $(find /home/rmajeti/programs -type d)    do         arr[i]=$dir         i=$((i+1))    done     while [ $j -lt $i ]   do         echo ${arr[$j]}         j=$((j+1))   done 


回答10:

If you want a key value store with support for spaces use the -A parameter:

declare -A programCollection programCollection["xwininfo"]="to aquire information about the target window."  for program in ${!programCollection[@]} do     echo "The program ${program} is used ${programCollection[${program}]}" done 

http://linux.die.net/man/1/bash "Associative arrays are created using declare -A name. "



回答11:

To read the values from keybord and insert element into array

# enter 0 when exit the insert element echo "Enter the numbers" read n while [ $n -ne 0 ] do     x[$i]=`expr $n`     read n     let i++ done  #display the all array elements echo "Array values ${x[@]}" echo "Array values ${x[*]}"  # To find the array length length=${#x[*]} echo $length 


回答12:

In ksh you do it:

set -A array element1 element2 elementn  # view the first element echo ${array[0]}  # Amount elements (You have to substitute 1) echo ${#array[*]}  # show last element echo ${array[ $(( ${#array[*]} - 1 )) ]} 


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