Apa perbedaan antara set, env, mendeklarasikan dan mengekspor ketika mengatur variabel di shell Linux?

17

Apa perbedaan antara set, env, declaredan exportketika menetapkan variabel dalam shell Linux, seperti bash?

pengguna3872279
sumber
1
Mengapa pertanyaan ini ditolak?
l0b0

Jawaban:

5

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 ~#
Shawn P.
sumber
declaredan setdan env? ekspor vs menyatakan?
Pacerier
Saya harus mengundurkan diri karena ini tidak menjawab pertanyaan.
Daniel C. Sobral
Beritahu saya jika ini lebih baik.
Shawn P.
1

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.

  1. env: tanpa opsi apa pun, menunjukkan variabel lingkungan saat ini dengan nilainya; Namun dapat digunakan untuk mengatur variabel lingkungan untuk satu perintah dengan -iflag
  2. set: 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 .
  3. declare: tanpa opsi apa pun, sama seperti env; juga dapat digunakan untuk mengatur variabel shell
  4. export: membuat variabel lingkungan variabel shell

Pendeknya:

  1. set tidak mengatur variabel shell atau lingkungan
  2. env dapat mengatur variabel lingkungan untuk satu perintah
  3. declare set variabel shell
  4. export membuat variabel lingkungan variabel shell

CATATAN declare -x VAR=VAL membuat variabel shell dan juga mengekspornya, menjadikannya variabel lingkungan.

Tran Triet
sumber