executando alias na variável no bash

4

Eu me deparei com esse comportamento estranho no meu script bash.

#!/bin/bash
V=a
alias $V="echo test"
echo $(a)                 #returns 'test'
echo $($V)                #returns ...'a: not found'

Existe alguma maneira de emular o comportamento anterior com a variável?

    
por Cole C 24.07.2016 / 23:06

2 respostas

8

Os aliases são expandidos apenas se o comando aparecer diretamente no código, sem qualquer expansão. Escrever coisas como \a , $V , $(echo a) , etc. suprime a pesquisa de alias.

Além disso, o bash (ao contrário de outros shells) não expande os aliases nos scripts por padrão, então a na verdade não não executa o alias no bash.

Use uma função em vez de um alias. Você precisará usar o nome original para definir a função.

V=a
a () { echo test; }
"$V"     # prints test

(Existem outras maneiras de fazer algo parecido com o que você quer usando eval , mas não use eval a menos que você saiba exatamente o que está fazendo. Citando coisas corretamente com eval é complicado.)

    
por 24.07.2016 / 23:47
2

É como se você estivesse dizendo:

#!/bin/bash
V=a
alias $V="echo test"
echo 'a'              #echo the out put of the 'echo test' command which is test 
echo '$V'             #echo the output of $V 'command' which is holding a value itself and it won't be executed as an alias since it's not used directly.

EDIT : Desculpe, eu estava errado em dizer que as variáveis não podem ser executadas como comando.

Se uma variável for o próprio comando, ela poderá ser executada, mas não quando seu valor for usado como um alias. Nesse caso, o valor como um alias pode funcionar individualmente, pois é como se você tivesse definido um alise.
Mas um alias não pode ser passado de uma variável.

    
por 24.07.2016 / 23:20