En zsh, ${$(pwd)}
genere el directorio actual. Sin embargo, si ejecuto echo ${/path/to/somewhere}
, solo muestra una línea vacía. ¿Por qué pasó esto? ¡Gracias!
Respuesta1
Supongo que hablas de print ${$(pwd)}
algo así, ¿verdad?
La expansión ${$(pwd)}
al directorio de trabajo actual es el comportamiento esperado, aunque puede parecer extraño a primera vista. No se deje engañar pensando que la sustitución del comando $(pwd)
se evalúa primero y el resultado se utiliza comonombre de la variable... no, se utiliza comovalor variable como man zshexpn
explica:
${name}
Se sustituye el valor, si lo hay, del nombre del parámetro.(...) Si se usa una
${...}
expresión de parámetro de tipo o una sustitución de comando de tipo en lugar de lo anterior, se expande primero y el resultado se usa como si fuera el valor de . (...) El formulario con suele ser útil en combinación con las banderas que se describen a continuación; vea los ejemplos a continuación.$(...)
name
name
$(...)
(...) La bandera f es útil para dividir una sustitución entre comillas dobles línea por línea. Por ejemplo,
${(f)"$(<file)"}
sustituye el contenido del archivo dividido para que cada línea sea un elemento de la matriz resultante.
A tu segundo ejemplo. Creo que esta es la sintaxis de reemplazo del patrón:
${name/pattern/repl}
Reemplace la coincidencia de patrón más larga posible en la expansión del nombre del parámetro por cadena repl. (...)
Vea este ejemplo primero:
$ foo=hello
$ print ${foo/hello/good/bye}
good/bye
Si omites foo
te dice zsh
que haga una búsqueda y reemplace en la variable ${}
, que está vacía:
$ print ${}
$
-- por lo tanto, ${/something/foo/bar}
también devuelve una cadena vacía.