Qual é a diferença entre $ (…) e '…' no Bash?

2

Eu obtive o resultado esperado com '...', mas falhei com $ (...)

kill $(ps ux | grep S..\.tcl | grep -v grep | awk '{print $2}')

Illegal variable name.

kill 'ps ux | grep S..\.tcl | grep -v grep | awk '{print $2}''

(kill expected processes)

Por googling, eu encontrei alguns diz que eles são intercambiáveis, mas não é por este exemplo. Então, qual é a diferença entre $ (...) e '...' no Bash?

    
por Arton 26.06.2015 / 04:59

2 respostas

7

Eu fiz um

grep -al 'Illegal variable name' /bin/*

e encontrou a mensagem em / bin / csh. Parece que você está executando o csh e não o bash quando está dando o comando. por exemplo:

csh $ echo 'echo abc'
abc
csh $ echo $(echo abc)
Illegal variable name.
    
por 26.06.2015 / 15:44
-1

Algumas explicações sobre o backtick (') também chamado de substituição de comando:

link

link

No bash (git-bash) também obtenho resultados diferentes. Executando um script em um arquivo, digamos /c/pathToScript/test.sh

#!/bin/bash
WORK_DIR=/c/myWorkingDirPath;
cd $WORK_DIR;
if [ 'pwd' != $WORK_DIR ]; then
  echo "Oh my... "; # 'pwd' returns /c/pathToScript 
fi
if [ $(pwd) != $WORK_DIR ]; then
  echo "Thank Goodness... "; #$(pwd) returns /c/myWorkingDirPath
fi

O $ (pwd) funciona no subshell criado quando executo o processo.

    
por 13.07.2016 / 16:54

Tags