Tcl - Special Variables

In Tcl, we classify some of the variables as special variables and they have a predefined usage/functionality. The list of specials variables is listed below.
argc
Refers to a number of command-line arguments.
argv
Refers to the list containing the command-line arguments.
argv0
Refers to the file name of the file being interpreted or the name by which we invoke the script.
env
Used for representing the array of elements that are environmental variables.
errorCode
Provides the error code for last Tcl error.
errorInfo
Provides the stack trace for last Tcl error.
tcl_interactive
Used to switch between interactive and non-interactive modes by setting this to 1 and 0 respectively.
tcl_library
Used for setting the location of standard Tcl libraries.
tcl_pkgPath
Provides the list of directories where packages are generally installed.
tcl_patchLevel
Refers to the current patch level of the Tcl interpreter.
tcl_platform
Used for representing the array of elements with objects including byteOrder, machine, osVersion, platform, and os.
tcl_precision
Refers to the precision i.e. number of digits to retain when converting to floating-point numbers to strings. The default value is 12.
tcl_prompt1
Refers to the primary prompt.
tcl_prompt2
Refers to the secondary prompt with invalid commands.
tcl_rcFileName
Provides the user specific startup file.
tcl_traceCompile
Used for controlling the tracing of bytecode compilation. Use 0 for no output, 1 for summary, and 2 for detailed.
tcl_traceExec
Used for controlling the tracing of bytecode execution. Use 0 for no output, 1 for summary, and 2 for detailed.
tcl_version
Returns the current version of the Tcl interpreter.
The above special variables have their special meanings for the Tcl interpreter.
Let's see some examples for special variables.
#!/usr/bin/tclsh

puts $tcl_version
When you run the program, you will get a similar output as shown below −
8.6

#!/usr/bin/tclsh

puts $env(PATH)
When you run the program, you will get a similar output as shown below −
/home/cg/root/GNUstep/Tools:/usr/GNUstep/Local/Tools:/usr/GNUstep/
System/Tools:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/webmaster/.local/bin:/
home/webmaster/bin:/usr/local/scriba/bin:/usr/local/smlnj/
bin:/usr/local/bin/std:/usr/local/bin/extra:/usr/local/fantom/bin:/usr/
local/dart/bin:/usr/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin:/opt/mono/
bin:/opt/mono/lib/mono/4.5:/usr/local/bin:.:/usr/libexec/sdcc:/usr/local/
icon-v950/bin:/usr/local/mozart/bin:/opt/Pawn/bin:/opt/jdk1.7.0_75/bin:/
opt/jdk1.7.0_75/jre/bin:/opt/pash/Source/PashConsole/bin/Debug/

#!/usr/bin/tclsh

puts $tcl_pkgPath
When you run the program, you will get a similar output as shown below −
/usr/lib64/tcl8.6 /usr/share/tcl8.6 /usr/lib64/tk8.6 /usr/share/tk8.6

#!/usr/bin/tclsh

puts $tcl_library
When you run the program, you will get a similar output as shown below −
/usr/share/tcl8.6

#!/usr/bin/tclsh

puts $tcl_patchLevel
When you run the program, you will get a similar output as shown below −
8.6.6

#!/usr/bin/tclsh

puts $tcl_precision
When you run the program, you will get a similar output as shown below −
0

#!/usr/bin/tclsh

puts $tcl_rcFileName
When you run the program, you will get a similar output as shown below −