Biến được mở rộng trong môi trường hiện tại.
$ set -x # turn on tracing
$ var1=123
+ var1=123
$ echo "Hello [$var1]"
+ echo 'Hello [123]'
Hello [123]
$ set +x
Như bạn có thể thấy từ dấu vết (các dòng bắt đầu bằng "+"), echo
thấy "Xin chào [123]". Nó không bao giờ có được các biến.
Như bạn đã thấy từ gogiel câu trả lời với câu hỏi khác của bạn, các biến môi trường xuất khẩu có ảnh hưởng đến môi trường của trẻ không:
$ echo $LANG
en_US.UTF-8
$ declare -p LANG # the response includes "-x" which shows the variable is already marked for export
declare -x LANG="en_US.UTF-8"
$ ls --help | head -n 4
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort.
$ LANG=es_MX.utf8 ls --help | head -n 4
Uso: ls [OPCIÓN]... [FICHERO]...
Muestra información acerca de los ARCHIVOS (del directorio actual por defecto).
Ordena las entradas alfabéticamente si no se especifica ninguna de las opciones -cftuSUX ni --sort.
Hoặc tôi có thể đặt giá trị của LANG
trong môi trường hiện tại và vì nó được xuất khẩu nên nó sẽ được kế thừa bởi môi trường con:
$ LANG=es_MX.utf8
$ grep --help | head -n 4
Modo de empleo: grep [OPCIÓN]... PATRÓN [FICHERO]...
Busca un PATRÓN en algún ARCHIVO o entrada estándar.
PATTERN es, por omisión, una expresión regular básica (BRE).
Ejemplo: grep -i '¡Hola, mundo!' menu.h main.c
$ sed --help | head -n 4
Uso: sed [OPCIÓN]... {guión-sólo-si-no-hay-otro-guión} [fichero-entrada]...
-n, --quiet, --silent
suprime la muestra automática del espacio de patrones
$ while [[ = 4 ]] # create an error on purpose to show Spanish error message
bash: se esperaba un operador binario condicional
bash: error sintáctico cerca de `4'
Chỉnh sửa:
Đây là một kịch bản đơn giản (hãy gọi nó là showvars
) để bạn có thể thấy những gì đang diễn ra cả bên trong và bên ngoài.
#!/bin/bash
arguments="$@"
printf "The script has started.\n"
printf "These are the parameters passed to the script: [$arguments]\n"
scriptvar=100
printf "This is the value of scriptvar: [$scriptvar]\n"
printf "This is the value of exportvar: [$exportvar]\n"
printf "This is the value of shellvar: [$shellvar]\n"
printf "This is the value of commandvar: [$commandvar]\n"
printf "The script has ended.\n"
Bây giờ chúng tôi thực hiện các bước này tại dấu nhắc shell:
$ shellvar=200
$ export exportvar=300
$ ./showvars 400 $shellvar 500
The script has started.
These are the parameters passed to the script: [400 200 500]
This is the value of scriptvar: [100]
This is the value of exportvar: [300]
This is the value of shellvar: []
This is the value of commandvar: []
The script has ended.
$ commandvar=600 ./showvars 400 $shellvar 500
The script has started.
These are the parameters passed to the script: [400 200 500]
This is the value of scriptvar: [100]
This is the value of exportvar: [300]
This is the value of shellvar: []
This is the value of commandvar: [600]
The script has ended.
$ printf "This is the value of commandvar: [$commandvar]\n"
This is the value of commandvar: []
$ commandvar=600
$ ./showvars 400 $shellvar 500
The script has started.
These are the parameters passed to the script: [400 200 500]
This is the value of scriptvar: [100]
This is the value of exportvar: [300]
This is the value of shellvar: []
This is the value of commandvar: []
The script has ended.
$ printf "This is the value of scriptvar: [$scriptvar]\n"
This is the value of scriptvar: []
$ printf "This is the value of exportvar: [$exportvar]\n"
This is the value of exportvar: [300]
$ printf "This is the value of shellvar: [$shellvar]\n"
This is the value of shellvar: [200]
$ printf "This is the value of commandvar: [$commandvar]\n"
This is the value of commandvar: [600]
Bạn có thể thấy shellvar
không có sẵn trong tập lệnh và scriptvar
không có sẵn bên ngoài nó. Kể từ khi exportvar
được xuất, nó có sẵn cả bên trong và bên ngoài tập lệnh. Và commandvar
chỉ khả dụng bên trong tập lệnh khi nó được truyền vào dòng lệnh khi gọi tập lệnh. Nếu nó được đặt trong môi trường tương tác và sau đó tập lệnh được gọi, nó chỉ khả dụng trong môi trường tương tác.
echo
. Vì thếecho
không bao giờ nhìn thấy biến, chỉ là giá trị của nó.