Não pode haver comandos que definam variáveis do seu shell, porque as variáveis são algo interno ao processo shell, então outro comando, vivendo em seu próprio processo, não poderia alterar isso.
Com o seu shell, você pode fazer coisas como:
var=$(some-command)
para recuperar a saída de um comando (sem os caracteres de nova linha à direita), mas se você precisar de dois resultados de um comando, é quando se torna mais complicado.
Um método é como:
eval "$(some-command)"
Onde algumas saídas de comando, como:
var1='something' var2='someotherthing'
Mas antes que você pergunte, não existe um comando padrão que use um caminho e o divida no diretório, no nome de base e na extensão (o que quer que isso signifique) dessa maneira.
Agora, os próprios shells podem ter recursos internos para isso. Por exemplo, csh
e zsh
têm modificadores que podem dar a você cabeça, cauda, extensão. Como em zsh
:
file=/path/to/foo.bar/
head=$file:h
tail=$file:t
ext=$file:e
rest=$file:r
Agora, convém considerar quais devem ser aquelas para um arquivo como .
ou ..
, /
, .bashrc
ou foo.tar.gz
?
Agora, se você está procurando pela sintaxe POSIX padrão, você já a tem (quase): rest=${file%.*}
. ${file#$rest}
é zsh
específico. Na sintaxe POSIX, você precisa de ext=${file#"$rest"}
, caso contrário, $rest
é considerado um padrão. Cuidado, pois pode não fazer o que você deseja se $file
contiver um caminho com /
caracteres (como foo.d/bar
).