Apa perbedaan antara set, env, declaredan exportketika menetapkan variabel dalam shell Linux, seperti bash?
Apa perbedaan antara set, env, declaredan exportketika menetapkan variabel dalam shell Linux, seperti bash?
Jawaban:
Tampaknya set dan menyatakan sedikit berbeda, dengan set menjadi lebih kuat.
Lihat "menyatakan" di bawah https://www.gnu.org/software/bash/manual/bash.html#Bash-Builtins menyatakan: "Nyatakan variabel dan berikan mereka atribut. Jika tidak ada nama yang diberikan, maka tampilkan nilai-nilai variabel sebagai gantinya.
Set "set" di bawah https://www.gnu.org/software/bash/manual/bash.html#The-Set-Builtin * set: "bawaan ini sangat rumit sehingga layak mendapatkan bagiannya sendiri. Set memungkinkan Anda untuk ubah nilai opsi shell dan atur parameter posisi, atau untuk menampilkan nama dan nilai variabel shell. "
ENV adalah variabel lingkungan di Bash: https://www.gnu.org/software/bash/manual/bash.html#Bash-Variables env adalah perintah Linux. Saya pikir ini adalah referensi yang bagus: /unix/103467/what-is-env-command-doing
Saya pikir ini adalah penjelasan ekspor yang bagus: http://www.unix.com/302531838-post2.html
Juga: https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins * ekspor (dari Bourne): "Tandai setiap nama untuk diteruskan ke proses anak di lingkungan."
Kode pinjaman dari URL di atas:
root@linux ~# x=5 <= here variable is set without export command
root@linux ~# echo $x
5
root@linux ~# bash <= subshell creation
root@linux ~# echo $x <= subshell doesnt know $x variable value
root@linux ~# exit <= exit from subshell
exit
root@linux ~# echo $x <= parent shell still knows $x variable
5
root@linux ~# export x=5 <= specify $x variable value using export command
root@linux ~# echo $x <= parent shell doesn't see any difference from the first declaration
5
root@linux ~# bash <= create subshell again
root@linux ~# echo $x <= now the subshell knows $x variable value
5
root@linux ~#
declaredan setdan env? ekspor vs menyatakan?
Pertama, Anda harus memahami itu environment variablesdan shell variablesbukan hal yang sama.
Kemudian, Anda harus tahu bahwa kerang memiliki atribut yang mengatur cara kerjanya. Atribut ini bukan variabel lingkungan atau shell.
Sekarang, lanjutkan untuk menjawab pertanyaan Anda.
env: tanpa opsi apa pun, menunjukkan variabel lingkungan saat ini dengan nilainya; Namun dapat digunakan untuk mengatur variabel lingkungan untuk satu perintah dengan -iflagset: tanpa opsi, nama dan nilai setiap variabel shell ditampilkan * ~ dari menjalankan man setdi rhel; juga dapat digunakan untuk mengatur atribut shell . Perintah ini TIDAK mengatur lingkungan atau variabel shell .declare: tanpa opsi apa pun, sama seperti env; juga dapat digunakan untuk mengatur variabel shellexport: membuat variabel lingkungan variabel shellPendeknya:
set tidak mengatur variabel shell atau lingkunganenv dapat mengatur variabel lingkungan untuk satu perintahdeclare set variabel shellexport membuat variabel lingkungan variabel shellCATATAN
declare -x VAR=VAL membuat variabel shell dan juga mengekspornya, menjadikannya variabel lingkungan.