Wie erstelle ich ein Array in Unix Shell Scripting?Arrays in Unix-Shell?
Antwort
Sie der folgenden Art versuchen:
#!/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
bricht Verzeichnisnamen mit Leerzeichen. Verwenden Sie eine While-Read-Schleife der Änderung IFS, um das zu kümmern. – ghostdog74
#!/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
Sie können die ABS "Advanced Bash-Scripting Guide" lesen
in bash, erstellen Sie Array wie folgt
arr=(one two three)
die Elemente
aufrufen$ echo ${arr[0]}
one
$ echo ${arr[2]}
three
für Benutzereingaben zu fragen, können Sie lesen
read -p "Enter your choice: " choice
ist das, was Sie fordern.?
Die Bourne-Shell und C-Shell haben keine Arrays, IIRC.
Zusätzlich haben, was andere gesagt, in Bash Sie die Anzahl der Elemente in einem Array erhalten können wie folgt:
elements=${#arrayname[@]}
und sie in Scheiben schneiden Stil Operationen:
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"
csh hat Arrays. –
@KeithThompson: Es ist nicht in der [man page] (http://linux.die.net/man/1/csh) dokumentiert, aber die Funktionalität scheint in mindestens einigen Versionen vorhanden zu sein. –
Die man-Seite erwähnt nicht "Arrays" mit diesem Namen, aber sehen Sie die Dokumentation des 'set'-Befehls (' set name = (wordlist) ') und der" Variable substitution "-Abschnitt (' $ name [selector] ' und '$ {name [selector]}'). Soweit ich weiß, hat csh immer Arrays unterstützt. Siehe zum Beispiel die Array-Variable '$ path', die die Umgebungsvariable' $ PATH' widerspiegelt. –
In KSH Sie tun es:
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)) ]}
Eine genauere Möglichkeit, das letzte Element anzuzeigen, ist 'echo $ {array [@]: (- 1)}" '. Dadurch müssen Sie den Array-Variablennamen nicht zweimal schreiben. –
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"
Bourne-Shell unterstützt keine Arrays. Es gibt jedoch zwei Möglichkeiten, das Problem zu behandeln.
Verwenden Positions Shell Parameter $ 1, $ 2, etc .:
$ set one two three
$ echo $*
one two three
$ echo $#
3
$ echo $2
two
Verwenden variable Auswertungen:
$ 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
Bash unterstützt Arrays. Ich bin mir nicht sicher, ob es original Bourne-Shells gibt, aber Bash ist in diesen Tagen häufiger ... – plesiv
@zplesivcak - ... auf GNU/Linux, da es eine GNU-Sache ist. Zum Beispiel wird * FreeBSD * nicht mit 'bash' geliefert (es kann jedoch über Ports installiert werden). Skripte, die "bash" -Features annehmen, sind nicht portierbar, und sie sind merklich langsamer als die meisten Bourne-Shell-Implementierungen (wie 'dash ', das * bei GNU/Linux-Distributionen üblich ist). 'bash' ist eine nette interaktive Shell, aber für Scripting ist es langsam. – tjameson
'$ *' gilt als schädlich. Normalerweise wird '$ @' bevorzugt, da es dasselbe tut, aber Leerzeichen enthält. '$ @' wird erweitert als "$ 1" "$ 2" "$ 3" ... "$ n", während '$ *' als "$ 1x $ 2x $ 3x ... $ n" erweitert wird, wobei 'x' steht ist '$ IFS' Trennzeichen (höchstwahrscheinlich, Leerzeichen). – zserge
Um die Werte von keybord zu lesen und Einsatzelement in 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
Der folgende Code erstellt und druckt ein Array von Zeichenfolgen in der 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[@]}
Ergebnis:
A
B
ElementC
ElementE
Nbr of elements: 4
A B ElementC ElementE
Sind Sie sicher, dass es mit '#!/Bin/sh' shebang funktioniert? Ich denke, Sie müssen '#!/Bin/bash' verwenden, um dies zu verwenden. – timurb
Danke Erthad. Tatsächlich habe ich es in #!/Bin/bash geändert. –
Wenn Sie für Räume eine Schlüsselwertspeicher mit Unterstützung wollen benutzen Sie den -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 „Assoziative Arrays erstellt -A Namen deklarieren. "
Ein Array kann in zwei Tagen geladen werden.
set -A TEST_ARRAY alpha beta gamma
oder
X=0 # Initialize counter to zero.
- Legen Sie das Array mit den Strings von Alpha-, Beta- und Gamma-
for ELEMENT in alpha gamma beta
do
TEST_ARRAY[$X]=$ELEMENT
((X = X + 1))
done
Außerdem glaube ich folgenden Informationen helfen können:
Die Shell unterstützt eindimensionale Arrays. Die maximale Anzahl der Array-Elemente beträgt 1.024. Wenn ein Array definiert ist, wird es automatisch auf 1.024 Elemente dimensioniert. Ein eindimensionales Array enthält eine Sequenz von Array-Elementen, die wie die auf einer Bahngleis verbundenen Boxcars miteinander verbunden sind.
Falls Sie das Array zuzugreifen:
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
Ihre Frage bezieht "Unix-Shell-Scripting", ist aber bash
markiert. Das sind zwei verschiedene Antworten.
Die POSIX-Spezifikation für Shells hat nichts über Arrays zu sagen, da die ursprüngliche Bourne-Shell sie nicht unterstützt hat. Selbst heute, unter FreeBSD, Ubuntu Linux und vielen anderen Systemen, hat /bin/sh
keine Array-Unterstützung. Wenn Sie also Ihr Skript in verschiedenen Bourne-kompatiblen Shells verwenden möchten, sollten Sie sie nicht verwenden. Alternativ, wenn Sie eine bestimmte Shell annehmen, stellen Sie sicher, dass Sie den vollständigen Namen in die Shebang-Zeile eingeben, z. #!/usr/bin/env bash
.
myArray=(first "second element" 3rd)
und Zugangselemente wie diese können
$ echo "${myArray[1]}"
second element
Sie alle erhalten:
Wenn Sie bash oder zsh oder eine moderne Version von ksh verwenden, können Sie ein Array wie folgt erstellen die Elemente über "${myArray[@]}"
. Sie können die Slice-Notation $ {array [@]: start: length} verwenden, um den Teil des Arrays, auf den verwiesen wird, z. "${myArray[@]:1}"
, um das erste Element zu verlassen.
Die Länge des Arrays ist ${#myArray[@]}
. Sie können ein neues Array mit allen Indizes aus einem vorhandenen Array mit "${!myArray[@]}"
erhalten.
Ältere Versionen von ksh vor ksh93 hatten auch Arrays, aber nicht die Klammer-basierte Notation, noch unterstützten sie Slicing. Sie könnten jedoch ein Array wie folgt erstellen:
set -A myArray -- first "second element" 3rd
- 1. Arrays von Arrays in TypeScript
- 2. Arrays in Arrays in einem PLIST
- 3. Umwandlung mongodb Arrays in Python Arrays
- 4. Wie konvertiert man Float-Arrays in Double-Arrays in Java?
- 5. Index eines Arrays in Liste des Arrays in C# findet
- 6. ALLOCATABLE-Arrays oder POINTER-Arrays?
- 7. Rediming-Arrays in VBA
- 8. Arrays in Smarty?
- 9. Sparse-Arrays in Haskell?
- 10. Mehrdimensionale Arrays in C#
- 11. Arrays in Javascript
- 12. Merge-Arrays in Javascript
- 13. Schlüsselreihenfolge in Arrays
- 14. Arrays in Assembly
- 15. Julia: Zuweisung in Arrays
- 16. Schnittstellende Arrays in Python
- 17. Kombinieren Arrays in Ruby
- 18. mehrdimensionale Arrays in awk
- 19. Arrays in Typ Skript
- 20. Search_array in verschachtelten Arrays
- 21. Unterschiede in Arrays
- 22. String-Arrays in C
- 23. 2D-Arrays in CUDA
- 24. Einschließlich Wenn in Arrays
- 25. Arrays in J Programmiersprache
- 26. Matlab-Arrays in C++
- 27. in PHP Arrays
- 28. Arrays in Schienen
- 29. Multidimensionale Arrays in PHP
- 30. Object-Arrays in Methodensignaturen
Die erste ist eine gute Frage, aber was hat die Programmausführung damit zu tun? – Frank
http://www.gnu.org/software/bash/manual/html_node/Arrays.html –
Siehe: [Arrays in Unix Bourne Shell] (http://unix.stackexchange.com/questions/137566/arrays-in -unix-bourne-shell # 137571) – agc