Qual é a diferença entre usar o comando shell (por exemplo, foo) diretamente e usar $ (foo)?

0

Eu fico confuso sobre o uso direto do comando e usando $ (foo). Estou usando o Mac, tento listar aplicativos que são instalados por brew cask (um gerenciador de pacotes) e ecoar cada aplicativo. Eu tenho dois scripts curtos da Shell, um primeiro assim:

#!/bin/bash
apps=$(brew cask list)
for app in ${apps}
do
    echo  "${app}"
done

Funciona bem, mas outro gosta disso:

#!/bin/bash
apps=$(brew cask list)
myecho=$(echo)
for app in ${apps}
do
    ${myecho}  "${app}"
done

Este retorna ./script2.sh: line 7: foo: command not found , foo é o nome do aplicativo. Qual é a diferença entre eu usar o echo diretamente e usar myecho como aliases?

    
por Sol Alsvid 24.04.2016 / 12:11

2 respostas

2

Neste comando

myecho=$(echo)

você está definindo myecho como um token vazio. Então o seguinte comando

${myecho}  "${app}"

é simplesmente "${app}" , que aparentemente é "foo" (não o que foi pretendido). Você criaria um alias usando uma sintaxe diferente:

alias myecho="echo"

Leitura adicional:

por 24.04.2016 / 12:13
1

Você não está definindo um alias. Em myecho=$(echo) , echo é executado e sua saída (nada, já que o eco não tem nada a ecoar) é armazenada na variável myecho . Isso, no entanto, tem alguma saída do echo:

$ myecho=$(echo "Hello")
$ echo "$myecho"
Hello

E a variável myecho armazenou.

O que eu acredito que você quer no segundo script é executar echo usando a variável myecho . Isso é feito assim:

#!/bin/bash
apps=$(brew cask list)
myecho="echo"
for app in ${apps}
do
    ${myecho}  "${app}"
done

Todos os itens acima não têm nada a ver com um alias. Um alias é definido por isso:

alias myecho='echo'

Mas, a linha para executar o alias não deve ter um $ :

myecho "${apps}"
    
por 25.04.2016 / 00:45

Tags