A substituição do comando $(...)
executa o comando dentro dos parênteses e coloca a saída de volta na linha de comando (bem, mais ou menos, veja em particular aqui se você realmente precisar dele.)
Eles fazem a mesma coisa:
ls $(echo /bin)
ls /bin
Na maioria dos casos, você não quer executar uma substituição de comando sozinho em uma linha de comando, mas apenas executar os comandos normalmente (como você fez com ls node_modules | grep ...
). Isso também é o mesmo que os anteriores, mas é estranho:
$(echo ls /bin)
Em particular, $(cd somedir)
não faz nada de útil, já que a substituição de comandos é executada em um subshell, então mudar o diretório não afeta o shell principal.
Isto:
$(pregunta $(programa_instalado node))
Primeiro, chama a função programa_instalado
, que gera (digamos) 1
. Então o shell tenta executar o comando pregunta 1
, mas a julgar pelo erro, não há comando com esse nome. Se houvesse, sua saída também seria executada como um comando .
O mesmo vale para git
e npm
, ou você realmente não tem aqueles instalados, ou deve verificar se seu PATH
é são.