Command
	     substitution reassigns the output of a command
	     or even multiple commands; it literally plugs the command
	     output into another context.
The classic form of command
	      substitution uses backquotes (`...`). Commands
	      within backquotes (backticks) generate command line text.
	      
| script_name=`basename $0`
echo "The name of this script is $script_name." | 
	      
| rm `cat filename`   # "filename" contains a list of files to delete.
#
# S. C. points out that "arg list too long" error might result.
# Better is              xargs rm -- < filename 
# ( -- covers those cases where "filename" begins with a "-" )
textfile_listing=`ls *.txt`
# Variable contains names of all *.txt files in current working directory.
echo $textfile_listing
textfile_listing2=$(ls *.txt)   # The alternative form of command substitution.
echo $textfile_listing
# Same result.
# A possible problem with putting a list of files into a single string
# is that a newline may creep in.
#
# A safer way to assign a list of files to a parameter is with an array.
#      shopt -s nullglob    # If no match, filename expands to nothing.
#      textfile_listing=( *.txt )
#
# Thanks, S.C. | 
            |  | Command substitution may result in word splitting.
	         | COMMAND `echo a b`     # 2 args: a and b
COMMAND "`echo a b`"   # 1 arg: "a b"
COMMAND `echo`         # no arg
COMMAND "`echo`"       # one empty arg
# Thanks, S.C. | 
 | 
|  | Word splitting resulting from command
		substitution may remove trailing newlines characters
		from the output of the reassigned command(s). This can
		cause unpleasant surprises.
		 | dir_listing=`ls -l`
echo $dirlisting
# Expecting a nicely ordered directory listing, such as:
# -rw-rw-r--    1 bozo       30 May 13 17:15 1.txt
# -rw-rw-r--    1 bozo       51 May 15 20:57 t2.sh
# -rwxr-xr-x    1 bozo      217 Mar  5 21:13 wi.sh
# However, what you get is:
# total 3 -rw-rw-r-- 1 bozo bozo 30 May 13 17:15 1.txt -rw-rw-r-- 1 bozo
# bozo 51 May 15 20:57 t2.sh -rwxr-xr-x 1 bozo bozo 217 Mar 5 21:13 wi.sh
# The newlines disappeared. | 
 Even when there is no word splitting, command
	        substitution can remove trailing newlines.
		 | # cd "`pwd`"  # This should always work.
# However...
mkdir 'dir with trailing newline
'
cd 'dir with trailing newline
'
cd "`pwd`"  # Error message:
# bash: cd: /tmp/file with trailing newline: No such file or directory
cd "$PWD"   # Works fine.
old_tty_setting=$(stty -g)   # Save old terminal setting.
echo "Hit a key "
stty -icanon -echo           # Disable "canonical" mode for terminal.
                             # Also, disable *local* echo.
key=$(dd bs=1 count=1 2> /dev/null)   # Using 'dd' to get a keypress.
stty "$old_tty_setting"      # Restore old setting. 
echo "You hit ${#key} key."  # ${#variable} = number of characters in $variable
#
# Hit any key except RETURN, and the output is "You hit 1 key."
# Hit RETURN, and it's "You hit 0 key."
# The newline gets eaten in the command substitution.
Thanks, S.C. | 
 | 
|  | Command substitution even permits setting a variable to the
	       contents of a file, using either redirection or the cat command.
	          | variable1=`<file1`      # Set "variable1" to contents of "file1".
variable2=`cat file2`   # Set "variable2" to contents of "file2".
#  Be aware that the variables may contain embedded whitespace,
#+ or even (horrors), control characters. | 
 | 
|  | The $(COMMAND) form has
		superseded backticks for command substitution.
	       | output=$(sed -n /"$1"/p $file)
# From "grp.sh"	example. | 
 | 
Examples of command substitution in shell scripts:
       
- Example 10-7 
- Example 10-24 
- Example 9-20 
- Example 12-2 
- Example 12-14 
- Example 12-11 
- Example 12-29 
- Example 10-12 
- Example 10-9 
- Example 12-23 
- Example 16-5 
- Example A-12 
- Example 28-1 
- Example 12-27 
- Example 12-28