Cuando se configura $HISTIGNOREel final con SP+ *o SP+ ?*, las listas de archivos en la carpeta actual se concatenarán a su valor.
No importa extglobsi está armado o desarmado.
Ejemplo NG (la carpeta actual tiene solo un archivo 'do_music.sh'):
$ export HISTIGNORE="ls:ls *:history:history *:sudo *"
$ echo $HISTIGNORE
ls:ls *:history:history *:sudo do_music.sh
$
Aceptar Ejemplo:
$ export HISTIGNORE="ls:ls *:history *:sudo *:history"
$ echo $HISTIGNORE
ls:ls *:history *:sudo *:history
$
Respuesta1
Actualización 2
Según mi respuesta original, debes usar comillas simples para que *permanezca como está. Si haces eso, la variable HISTIGNOREcontendrá solo la *expansión y no la expansión. Cuando usted echove que se produce la expansión, porque el shell reemplaza $HISTIGNOREcon a *y luego sustituye con la lista de archivos.
Puede verificar ejecutando env | grep HISTIGNOREen ambos casos. En el "caso verás do_music.shallí, en el 'caso verás el *.
Además, puede intentar ejecutar la export HISTIGNORElínea mientras está en un directorio y la echolínea mientras está en otro, verá una diferencia dependiendo de si usa 'o"
(Taché la parte anterior porque resulta ser falsa; después de todo, tanto las comillas simples como las dobles deberían funcionar en su caso, ya que *tampoco se sustituyen dentro de las comillas dobles).
Actualización 3
La razón por la que obtienes este echocomportamiento es por el orden de las sustituciones en bash. Según el manual:
The order of expansions is: brace expansion; tilde expansion, parameter and vari‐
able expansion, arithmetic expansion, and command substitution (done in a left-to-
right fashion); word splitting; and pathname expansion.
Primero sucede elparámetro/variableexpansión (los $HISTIGNOREcambios a *), y después de eso sucede elnombre de rutaexpansión (los *cambios en la lista de archivos).
Respuesta original a continuación
Cuando ejecutas la primera línea:
export HISTIGNORE="ls:ls *:history:history *:sudo *"
el shell ya expande el último *a la lista de archivos en su directorio, es por eso que llega do_music.sha ese lugar.
Si tuviera un archivo llamado, por ejemplo bla:sudo, *:sudotambién sería sustituido por este. No es así, porque ningún archivo coincide con ese patrón.
Para evitar que esto suceda, debes usar comillas simples para evitar *sustituciones:
export HISTIGNORE='ls:ls *:history:history *:sudo *'
Actualizar
Por cierto, HISTIGNORE no tiene nada de especial, esto sucedería para cualquier definición de variable, o para cualquier comando en ese sentido, si tiene un *"sí" en algún lugar entre comillas dobles, será sustituido por la lista de archivos (¡sin comenzar con .! ) en el directorio actual (a menos que el directorio actual esté vacío o solo contenga archivos que comiencen con ., en cuyo caso *permanecerá como está).


