Usando um parâmetro várias vezes em um comando bash de linha única [duplicado]

1

Ocasionalmente, preciso executar um comando como:

mv "very-long-file-name.x" "very-long-file-name.y"

Eu gostaria de conseguir isso sem repetir o nome do arquivo muito longo duas vezes ...

Eu sei como fazer isso passando apenas "long-file-name" uma vez para um script bash que usaria $ 1 ... mas como posso fazer isso sem um script?

    
por GJ. 31.05.2014 / 23:50

2 respostas

3

bash permite definir variáveis antes do comando, assim:

X="very-long-file-name" bash -c 'mv "${X}.x" "${X}.y"'

Mas tenha em atenção que as variáveis definidas desta forma são definidas apenas para o ambiente em que o comando é executado, não no ambiente da shell pai. Então você tem que ter o bash -c , e colocar aspas simples em torno da string do argumento subshell, caso contrário as variáveis serão interpretadas no shell pai, onde elas não estão definidas.

    
por 01.06.2014 / 07:05
5

Faça uso da Expansão de órtese :

mv very-long-file-name.{x,y}

Não cite a parte {x,y} . Não adicione um espaço antes ou depois de qualquer chave ou vírgula.

Após a expansão, isso resultará em:

mv very-long-file-name.x very-long-file-name.y
    
por 31.05.2014 / 23:53

Tags