GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Menunda Ekspansi Variabel?

Saya ingin menginisialisasi beberapa string di bagian atas skrip saya dengan variabel yang belum disetel, seperti:

str1='I went to ${PLACE} and saw ${EVENT}'
str2='If you do ${ACTION} you will ${RESULT}'

dan kemudian di PLACE , EVENT , ACTION , dan RESULT akan ditetapkan. Saya ingin kemudian dapat mencetak string saya dengan variabel yang diperluas. Apakah satu-satunya pilihan saya eval ? Ini sepertinya berhasil:

eval "echo ${str1}"

apakah ini standar? apakah ada cara yang lebih baik untuk melakukan ini? Akan lebih baik untuk tidak menjalankan eval mengingat variabelnya bisa apa saja.

Jawaban yang Diterima:

Dengan jenis input yang Anda tunjukkan, satu-satunya cara untuk memanfaatkan ekspansi shell untuk mengganti nilai menjadi string adalah dengan menggunakan eval dalam beberapa bentuk. Ini aman selama Anda mengontrol nilai str1 dan dapat memastikan bahwa itu hanya referensi variabel yang dikenal sebagai aman (tidak mengandung data rahasia) dan tidak mengandung karakter khusus shell yang tidak dikutip lainnya. Anda harus memperluas string di dalam tanda kutip ganda atau di dokumen di sini, dengan cara itu hanya "$` bersifat khusus (harus didahului dengan di str1 ).

eval "substituted="$str1""

Akan jauh lebih kuat untuk mendefinisikan fungsi daripada string.

fill_template () {
  sentence1="I went to ${PLACE} and saw ${EVENT}"
  sentence2="If you do ${ACTION} you will ${RESULT}"
}

Atur variabel lalu panggil fungsi fill_template untuk mengatur variabel keluaran.

PLACE=Sydney; EVENT=fireworks
ACTION='not learn from history'; RESULT='have to relive history'
fill_template
echo "During my holidays, $sentence1."
echo "Cicero said: "$sentence2"."

Linux
  1. Cara Menetapkan Output dari Perintah Linux ke Variabel

  2. Bagaimana Melakukan Evaluasi Variabel Tidak Langsung?

  3. Cara Mengatur Variabel $Path di Linux

  1. Variabel Lingkungan Linux:Cara Membaca dan Mengatur di VPS Linux

  2. Contoh Perintah Ekspor Linux (Cara Mengatur Variabel Lingkungan)

  3. Bagaimana sumber variabel tertentu

  1. Ekspansi &Variabel Bash Brace?

  2. Bagaimana Cara Mendapatkan Tipe Data Variabel Di Zsh?

  3. Bagaimana cara menyimpan perintah dalam variabel dalam skrip Shell?