De subseção Substituição de Comando no padrão POSIX :
Command substitution allows the output of a command to be substituted in place of the command name itself.
As substituições de comandos permitem uma maneira prática de fazer uso da saída de um comando sem a necessidade de primeiro gravá-lo em um arquivo temporário e, em seguida, lê-lo a partir desse arquivo. Isso é feito melhor se a saída do comando for uma string curta em uma única linha.
Algumas pessoas usam substituições de comando para coletar a saída de um comando, embora a quantidade de saída possa ser um documento de várias linhas. Isso geralmente não é uma boa maneira de usar a substituição de comandos. Em vez disso, o idioma padrão do Unix de passar dados entre estágios de processamento usando pipelines ou arquivos temporários deve ser usado.
Exemplos de substituições de comandos que eu uso:
Por exemplo, para descobrir se o usuário atual está executando o script como root:
if [ "$( id -u )" -ne 0 ]; then
echo 'This script requires root privileges, re-run with sudo' >&2
exit 1
fi
A substituição do comando $(id -u)
será substituída pela saída de id -u
, que retornará o UID (um inteiro) do usuário atual.
Outro exemplo. Estou usando o GnuPG para assinar git
commits. Para o GnuPG funcionar corretamente, eu preciso definir GPG_TTY
para o nome do dispositivo de terminal atual no arquivo de inicialização do meu shell interativo. Eu faço isso com
export GPG_TTY="$( tty )"
Isso define GPG_TTY
para algo como /dev/ttyp4
dependendo do que o dispositivo de terminal atual está na sessão do shell.
Outro exemplo. Eu tenho um script que tem que tratar a execução em uma máquina Solaris como um caso especial:
case "$( uname -s )" in
SunOS)
# code specific for Solaris
;;
*)
# code for all other Unix platforms
esac
Outro exemplo. O comando getconf PATH
retorna o "caminho padrão" para o sistema atual. Eu o uso em algumas circunstâncias para redefinir a variável PATH
para um valor padrão "sane":
PATH="$( getconf PATH )"