Nasıl haşat hash tabloları tanımlamak için?
Ne bash Python dictionaries ama eşdeğerdir (OS X ve Linux üzerinde çalışması gerekir).
CEVAP
Bash 4
Bash 4 doğal olarak bu özelliği destekler. Senaryo senindir hashbang #!/usr/bin/env bash
#!/bin/bash
veya Kaynaklar 10 ** 11 ** değil başka bir şey olduğundan emin olun. Komut çalıştırma olduğunuzdan emin olun, ve bir şey bash
hashbang göz ardı edilmesine neden olan sh script
gibi aptal değil. Bu basit şeyler, ama pek de başarısız devam et, bu yüzden yeniden yineleme.
Yaparak ilişkili bir dizi bildirmek için:
declare -A animals
Bu elemanlar normal dizi atama operatörünü kullanarak doldurabilirsiniz:
animals=( ["moo"]="cow" ["woof"]="dog")
Ya da onları birleştirmek için:
declare -A animals=( ["moo"]="cow" ["woof"]="dog")
O zaman normal diziler gibi onları kullanın. "${animals[@]}"
değerleri, "${!animals[@]}"
(!
haber) anahtarları genişletir genişletir. Onları alıntı: sakın unutmayın
echo "${animals["moo"]}"
for sound in "${!animals[@]}"; do echo "$sound - ${animals["$sound"]}"; done
Bash 3
Önce bash 4, ilişkilendirilebilir diziler yok.eval
onları taklit etmek için kullanmayın. Çünkü veba gibi eval kaçınmak gerekirveba kabuk komut dosyası. En önemli nedeni çalıştırılabilir kod (pek çok başka nedenler de var) elde edilen verileri işlemek istemiyorum.
Birincisi ve en önemlisiSadece bash 4 için yükseltme düşünün. Cidden.Gelecek şimdi başlıyordur yaşam geçmişte vebundan muzdaripkodunuzu ve her zavallı kırık ve çirkin aptal kesmek zorlayarak ruh bakımı sıkışmış.
Neden saçma bir bahane varsa "yükseltme", declare
çok daha güvenli bir seçenektir. eval
gibi bash kod gibi verileri değerlendirmek değil, ve gibi rastgele kod enjeksiyon bu kadar kolay izin vermez.
Hadi kavramları tanıtarak cevap hazırlayın:
İlk olarak, yönlendirme (cidden, hiç akıl hastası olduğu sürece bu kullanın veya kesmek yazmak için bazı diğer kötü bahanen var).
$ animals_moo=cow; sound=moo; i="animals_$sound"; echo "${!i}"
cow
İkinci olarak, declare
:
$ sound=moo; animal=cow; declare "animals_$sound=$animal"; echo "$animals_moo"
cow
Onları bir araya getirmek:
# Set a value:
declare "array_$index=$value"
# Get a value:
arrayGet() {
local array=$1 index=$2
local i="${array}_$index"
printf '%s' "${!i}"
}
Hadi bunu kullanın:
$ sound=moo
$ animal=cow
$ declare "animals_$sound=$animal"
$ arrayGet animals "$sound"
cow
Not: bir işlev koyamazsınız declare
. Bash bir işlev içinde declare
birini kullanın yarattığı değişken döneryerelbu işlev kapsamı, anlamı ve global diziler erişim değiştiremez. (Beyan kullanabilirsiniz bash 4 global değişkenleri bildirmek için-g - 4, ilk etapta ilişkilendirilebilir diziler kullanarak, bu hack değil bash.)
Özet
Bash 4 için yükseltme ve declare -A
kullanın. Değil, tamamen değiştirmeyi 32 ** yukarıda açıklandığı gibi çirkin kesmek yapmadan önce eğer. Ve kesinlikle durun halt eval
hackery uzak.
Nasıl bir WordPress kullanmak çok CSS ...
Nasıl raylar özel bir yapılandırma değ...
Nasıl python iki boyutlu bir dizi tanı...
İki alanları tanımlamak için nasıl &qu...
Java özel durum sınıfı tanımlamak için...