Apakah ada cara yang elegan untuk mengatur variabel shell ke isi file?


11

Katakanlah saya memiliki beberapa data konfigurasi dalam file config. Untuk kenyamanan, saya ingin memuat data ini ke dalam variabel shell CONFIG_DATA,.

Jelas saya bisa melakukannya:

CONFIG_DATA="$(cat config)"

Tapi ini terasa seperti tidak bergunacat bagiku. Apakah ini satu-satunya cara untuk melakukan ini? Atau ada cara yang lebih elegan untuk melakukannya?

Jawaban harus lebih suka POSIX tetapi dapat menggunakan shell apa pun.


2
Membaca seluruh file dalam memori seperti ini hampir selalu merupakan ide yang buruk, terlepas dari bagaimana Anda menulisnya.
Satō Katsura

2
@SatoKatsura dalam beberapa kasus sangat benar. namun untuk keperluan pertanyaan ini, Anda dapat mengasumsikan bahwa file tersebut super kecil, jadi itu bukan masalah besar.
strugee

1
@SatoKatsura: mengapa?
RemcoGerlich

Jawaban:


23

Di Bash dan Z shell, setidaknya, ada cara yang lebih cepat:

CONFIG_DATA=$(<config)

Mengutip dari halaman manual shell Bourne Again:

Substitusi perintah $ (file cat) dapat diganti dengan yang setara tetapi lebih cepat $ (<file).


1
Saya tidak menganggap ini pilihan yang baik. Apa pun perasaan OP terhadap penggunaan kucing yang tidak berguna, contoh OP cukup sederhana sehingga sebagian besar pengguna Bash akan memahaminya. Ini juga cukup portabel. Sekarang $(<file)jauh lebih jarang, sehingga mungkin menghasilkan lebih banyak WTF; dan peningkatan kecepatan dari operasi ini, jika konfigurasi tersebut akan dimuat ke variabel, mungkin dapat diabaikan
MatthewRock

6
@MatthewRock perhatikan bahwa banyak praktik yang sangat buruk adalah umum dan tidak asing. Salah satu contoh penggunaan kucing yang tidak berguna for i in $(cat file); do ...adalah yang lain. Bahwa mereka biasa bukan alasan untuk terus menggunakan alat yang buruk. Yang tidak mengatakan bahwa penggunaan khusus kucing ini terlalu buruk, saya tidak yakin apakah ada cara yang lebih portabel. Hanya mengatakan itu biasa & akrab! = Bagus.
terdon
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.