Apa perbedaan antara set
, env
, declare
dan export
ketika menetapkan variabel dalam shell Linux, seperti bash
?
Apa perbedaan antara set
, env
, declare
dan export
ketika 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 ~#
declare
dan set
dan env
? ekspor vs menyatakan?
Pertama, Anda harus memahami itu environment variables
dan shell variables
bukan 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 -i
flagset
: tanpa opsi, nama dan nilai setiap variabel shell ditampilkan * ~ dari menjalankan man set
di 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.