Bash Script Yazmaya Giriş
Alex Scriven
Data Scientist
Bash'te iki tür dizi vardır:
Python'da: my_list = [1,3,2,4]
R'de: my_vector <- c(1,3,2,4)
Sayısal indeksli bir dizi Bash'te iki şekilde oluşturulabilir.
declare -a my_first_array
my_first_array=(1 2 3)
Unutmayın: eşittir işaretinin etrafında boşluk yok!
Bash'te dizi öğeleri virgülle ayrılmaz:
Bu yanlıştır:
my_first_array=(1, 2, 3)
Bu doğrudur:
my_first_array=(1 2 3)
array[@] ile döndürülür. Ancak bu özelliklere erişirken Bash, dizi adının etrafında süslü parantez ister.my_array=(1 3 5 2)
echo ${my_array[@]}
1 3 5 2
#array[@] ile alınırecho ${#my_array[@]}
4
Dizi öğelerine köşeli parantezle erişme.
my_first_array=(15 20 300 42)
echo ${my_first_array[2]}
300
Dizi öğelerini indeks gösterimiyle ayarlayın.
my_first_array=(15 20 300 42 23 2 4 33 54 67 66)my_first_array[0]=999echo ${my_first_array[0]}
999
$my_first_array[0]=999 gibi bir indeksi üzerine yazarken $ kullanmayın; çalışmaz.Diziden bir alt küme almak için array[@]:N:M gösterimini kullanın.
N başlangıç indeksi, M döndürülecek öğe sayısıdır.my_first_array=(15 20 300 42 23 2 4 33 54 67 66)
echo ${my_first_array[@]:3:2}
42 23
array+=(elemanlar) ile diziye ekleme yapın.
Örneğin:
my_array=(300 42 23 2 4 33 54 67 66)my_array+=(10) echo ${my_array[@]}
300 42 23 2 4 33 54 67 66 10
Eklemek istediğiniz şeyin etrafına parantez koymazsanız ne olur? Görelim.
Örneğin:
my_array=(300 42 23 2 4 33 54 67 66)
my_array+=10
echo ${my_array[@]}
30010 42 23 2 4 33 54 67 66
10 dizesi yalnızca ilk öğeye eklenir. İstediğimiz bu değil!
bash --version ile kontrol edinPython'da:
my_dict = {'city_name': "New York", 'population': 14000000}
R'de:
my_list = list(city_name = c('New York'), population = c(14000000))
İlişkilendirmeli bir dizi yalnızca declare sözdizimi (ve büyük -A) ile oluşturulabilir.
Önce declare edip sonra öğe ekleyebilir veya tek satırda yapabilirsiniz.
Bir ilişkilendirmeli dizi oluşturalım:
declare -A city_details # Önce declare edincity_details=([city_name]="New York" [population]=14000000) # Öğeleri ekleyinecho ${city_details[city_name]} # Anahtarla indeksleyip değeri döndürün
New York
Alternatif olarak, ilişkilendirmeli diziyi tek satırda oluşturup atayın
declare -A city_details=([city_name]="New York" [population]=14000000)
İlişkilendirmeli dizinin 'anahtarlarına' ! ile erişin
echo ${!city_details[@]} # Tüm anahtarları döndür
city_name population
Bash Script Yazmaya Giriş