Bir dosyanın içeriğini kabuk değişkeni ayarlamanın zarif bir yolu var mı?


11

Dosyada bazı yapılandırma verilerim olduğunu varsayalım config. Kolaylık sağlamak için, bu verileri bir kabuk değişkenine yüklemek istiyorum CONFIG_DATA.

Açıkçası yapabilirim:

CONFIG_DATA="$(cat config)"

Ama bu bana bir işe yaramazcat gibi geliyor. Bunu yapmanın tek yolu bu mu? Yoksa bunu yapmanın daha zarif bir yolu var mı?

Yanıtlar POSIX'i tercih etmelidir, ancak herhangi bir kabuk kullanabilir.


2
Bellekte böyle bir dosyayı okumak, nasıl yazdığınıza bakılmaksızın neredeyse her zaman kötü bir fikirdir.
Satō Katsura

2
@SatoKatsura bazı durumlarda çok doğru. ancak bu sorunun amacı için dosyanın çok küçük olduğunu varsayabilirsiniz, bu yüzden büyük bir sorun değildir.
16'da strugee

1
@SatoKatsura: neden?
RemcoGerlich

Yanıtlar:


23

Bash ve Z kabuğunda en azından daha hızlı bir yol var:

CONFIG_DATA=$(<config)

Bourne Again kabuğunun adam sayfasından alıntı yapmak için:

$ (Cat dosyası) komutunun yerine eşdeğer ancak daha hızlı $ (<dosya) kullanılabilir.


1
Bunu iyi bir seçenek olarak görmezdim. OP'nin kedinin yararsız kullanımına ilişkin hisleri ne olursa olsun, OP'nin örneği çoğu Bash kullanıcısının anlayabileceği kadar basittir. Aynı zamanda oldukça taşınabilir. Şimdi $(<file)çok daha az yaygındır, bu yüzden çok daha fazla WTF'ye neden olabilir; ve eğer böyle bir konfigürasyon bir değişkene yüklenecekse, bu işlemden elde edilen hız kazancı muhtemelen önemsizdir
MatthewRock

6
@MatthewRock, çok sayıda kötü uygulamanın yaygın ve tanıdık olduğunu belirtiyor. Kedinin faydasız kullanımları bir örnektir, for i in $(cat file); do ...başka bir örnek . Ortak olmaları, kötü araçlar kullanmaya devam etmek için bir sebep değildir. Bu, kedinin bu özel kullanımının kötü bir şey olduğunu söylemek değildir, daha taşınabilir bir yol olup olmadığından emin değilim. Sadece bu ortak ve tanıdık demek! = İyi.
terdon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.