Desde man bash
[[ expression ]]
Return a status of 0 or 1 depending on the evaluation of the conditional
expression expression. Expressions are composed of the primaries
described below under CONDITIONAL EXPRESSIONS. Word splitting and pathname
expansion are not performed on the words between the [[ and ]]; tilde
expansion, parameter and variable expansion, arithmetic expansion, command
substitution, process substitution, and quote removal are performed.
Conditional operators such as -f must be unquoted to be recognized as primaries.
O en resumen, el patrón no está expandido.
Una alternativa simple podría verse como
if [[ $(echo $d/lib*) != "$d/lib*" ]]; then
mv /etc/launchd.conf $d/launchd.conf
fi
Explicación breve sobre cómo funciona esto:
-
echo $d/lib*
se expande a una lista de archivos de la biblioteca si hay alguno presente, esta lista no es igual a $d/lib*
(que no se expande), por lo que se ejecuta mv
- OTOH si no hay archivos de biblioteca presentes, el eco devuelve la cadena
$d/lib*
, el !=
se evalúa como falso y el mv
no se ejecuta