Variabel diperluas di lingkungan saat ini.
$ set -x # turn on tracing
$ var1=123
+ var1=123
$ echo "Hello [$var1]"
+ echo 'Hello [123]'
Hello [123]
$ set +x
Seperti yang dapat Anda lihat dari jejak (garis yang dimulai dengan "+"), echo
lihat "Halo [123]". Tidak pernah mendapatkan variabel.
Seperti yang Anda lihat dari jawaban gogiel untuk pertanyaan Anda yang lain, variabel lingkungan yang diekspor memang memengaruhi lingkungan anak:
$ 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.
Atau saya bisa menetapkan nilai LANG
di lingkungan saat ini dan karena diekspor, itu akan diwarisi oleh lingkungan anak:
$ 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'
Sunting:
Berikut ini adalah skrip sederhana (sebut saja showvars
) sehingga Anda dapat melihat apa yang terjadi di dalam dan di luar.
#!/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"
Sekarang kita lakukan langkah-langkah ini di prompt 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]
Seperti yang Anda lihat shellvar
tidak tersedia di dalam skrip dan scriptvar
tidak tersedia di luarnya. Sejak exportvar
diekspor, tersedia di dalam dan di luar skrip. Dan commandvar
hanya tersedia di dalam skrip ketika dilewatkan di baris perintah saat memanggil skrip. Jika diatur di lingkungan interaktif dan kemudian skrip disebut, itu hanya tersedia di lingkungan interaktif.
echo
. Jadiecho
tidak pernah melihat variabel, hanya nilainya.