Arasındaki fark nedir set
, env
, declare
ve export
gibi bir Linux kabuğunda bir değişken ayarlarken bash
?
Arasındaki fark nedir set
, env
, declare
ve export
gibi bir Linux kabuğunda bir değişken ayarlarken bash
?
Yanıtlar:
Görünüşe göre set ve deklarasyon biraz daha farklı, set daha güçlü.
Altında "declare" Bkz https://www.gnu.org/software/bash/manual/bash.html#Bash-Builtins "Declare değişkenleri ve onları bağlıyor vermek hiçbir isim verilir, o zaman değişkenlerin değerleri görüntülemek: declare. yerine.
Https://www.gnu.org/software/bash/manual/bash.html#The-Set-Builtin * set altında "set" ayarını yapın : "Bu yerleşik, kendi bölümünü hak edecek kadar karmaşıktır. kabuk seçeneklerinin değerlerini değiştirebilir ve konum parametrelerini ayarlayabilir veya kabuk değişkenlerinin adlarını ve değerlerini görüntüleyebilir. "
ENV, Bash'teki bir ortam değişkenidir: https://www.gnu.org/software/bash/manual/bash.html#Bash-Variables env bir Linux komutudur. Bunun iyi bir referans olduğunu düşünüyorum: /unix/103467/what-is-env-command-doing
Bunun ihracatın iyi bir açıklaması olduğunu düşündüm: http://www.unix.com/302531838-post2.html
Ayrıca: https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins * export (Bourne'den): "Ortamdaki alt süreçlere geçirilecek her adı işaretleyin."
Yukarıdaki URL'den borçlanma kodu:
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
ve set
ve env
? ihracat vs beyan?
İlk olarak, bunu anlamalısınız environment variables
ve shell variables
aynı şey değil.
Daha sonra, mermilerin nasıl çalıştığını yöneten niteliklere sahip olduğunu bilmelisiniz . Bu öznitelikler ortam veya kabuk değişkenleri değildir.
Şimdi, sorunuzu cevaplamaya devam edin.
env
: herhangi bir seçenek olmadan, geçerli ortam değişkenlerini değerleriyle gösterir; Ancak tek bir komut için ayarlanan ortam değişkeni için kullanılabilir -i
bayrakset
: seçenekler olmadan, her kabuk değişkeninin adı ve değeri man set
rhel'de çalışmadan görüntülenir ; kabuk niteliğini ayarlamak için de kullanılabilir . Bu komut , ortam veya kabuk değişkeni ayarlamaz .declare
: herhangi bir seçenek olmadan, aynı env
; kabuk değişkenini ayarlamak için de kullanılabilirexport
: kabuk değişkenlerini ortam değişkenleri yaparKısacası:
set
kabuk veya ortam değişkenleri belirlemezenv
tek bir komut için ortam değişkenlerini ayarlayabilirdeclare
kabuk değişkenlerini ayarlarexport
kabuk değişkenlerini ortam değişkenleri yaparNOT
declare -x VAR=VAL
kabuk değişkenini oluşturur ve bunu dışa aktarır, böylece ortam değişkeni yapar.
declare -g
küresel bir değişken yaratacak, aynı zamanda çevrenin bir parçası olacak mı?
global scope
Efekti görmek için bir işlev oluşturmayı deneyebilirsiniz declare -g a=3
. Bunu çalıştırdıktan sonra, değişken global olarak kapsamlandığından, işlevden çıktıktan sonra bile, değişken hala var olur (örneğin echo $ a ile başvurabilirsiniz)