No zsh, ${$(pwd)}
produza o diretório atual. No entanto, se eu executar echo ${/path/to/somewhere}
, ele mostrará apenas uma linha vazia. Por que isso acontece? Obrigado!
Responder1
Presumo que você esteja falando sobre print ${$(pwd)}
ou algo parecido, certo?!
A expansão ${$(pwd)}
para o diretório de trabalho atual é o comportamento esperado, embora possa parecer estranho à primeira vista. Não se deixe enganar pensando que a substituição do comando $(pwd)
é avaliada primeiro e o resultado é usado comonome variável... não, é usado comovalor variável como man zshexpn
explica:
${name}
O valor, se houver, do nome do parâmetro é substituído.(...) Se uma
${...}
expressão de parâmetro de tipo ou uma$(...)
substituição de comando de tipo for usada no lugarname
acima, ela será expandida primeiro e o resultado será usado como se fosse o valor dename
. (...) O formulário with$(...)
é frequentemente útil em combinação com os sinalizadores descritos a seguir; veja os exemplos abaixo.(...) O sinalizador f é útil para dividir uma substituição entre aspas linha por linha. Por exemplo,
${(f)"$(<file)"}
substitui o conteúdo do arquivo dividido para que cada linha seja um elemento do array resultante.
Para o seu segundo exemplo. Acho que esta é a sintaxe de substituição do padrão:
${name/pattern/repl}
Substitua a correspondência de padrão mais longa possível na expansão do nome do parâmetro por string repl. (...)
Veja este exemplo primeiro:
$ foo=hello
$ print ${foo/hello/good/bye}
good/bye
Se omitir foo
você manda zsh
fazer uma busca e substituir na variável ${}
, que está vazia:
$ print ${}
$
-- portanto, ${/something/foo/bar}
também retorna uma string vazia.