Unix Shell - Understanding the use of parenthesis for variables Unix Shell - Understanding the use of parenthesis for variables unix unix

Unix Shell - Understanding the use of parenthesis for variables


This is rather crude but should be a good start:

abc - bare word\string that can be a variable name: abc=123

$abc - reference to a variable called abc

${abc} - string safe variable reference file_${abc}_name.txt

$(abc) - run the command abc and use it's stdout in place of the $(abc)

($abc) - run the command stored $abc in a subshell

Assuming you are in bash read the docs on variables and command substitution and parameter substitution.


The $ character is used to signal that parameter expansion is to be performed on the term following. Therefore if the shell reads

abc

on it will be parsed as a command and the shell will try and execute that command.

If the shell sees

$abc

it will perform parameter expansion on the text abc and effectively substitute the value of abc in place.

${abc}

will also perform parameter expansion. The use of the parentheses becomes significant when you have expressions like this:

${abc}_sometext

versus

$abc_sometext

In the 1st instance the shell will perform parameter expansion on abc. In the second instance it will perform parameter expansion on abc_sometext

The $( tells the shell to execute whats in the braces and perform command substitution. In this context the $ is not used for parameter expansion. So if the shell reads the following:

$(abc)

the shell will execute abc and the output from it will be substitued in place and the shell will try to execute that string.

( simply groups commands and executes them in a subshell. So

(abc)

will execute abc but unlike $(abc) it will not try and execute whatever the output of the command is. For example:

$ $(which ls)Desktop  Documents  Downloads  Mail  Manjaro  Music  Pictures  Public      Templates  Videos  bin  code  tmp$ (which ls)/usr/bin/ls$