Salida de ${PATH#:*} y ${PATH##:*}

Salida de ${PATH#:*} y ${PATH##:*}

El contenido de la variable PATH en mi sistema es el siguiente:

> echo $PATH
/c/Users/USER/bin:/mingw32/bin:/usr/local/bin:/usr/bin:/bin:/mingw32/bin:/usr/bin:/c/Users/USER/bin:/c/ProgramData/Oracle/Java/javapath:/c/Windows/system32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0:/c/Program Files/Broadcom/Broadcom 802.11 Network Adapter/Driver:/c/Program Files/Toshiba/Bluetooth Toshiba Stack/sys:/c/Program Files/Internet Explorer:/c/Program Files/Common Files/lenovo/easyplussdk/bin:/c/Program Files/Skype/Phone:/cmd:/usr/bin/vendor_perl:/usr/bin/core_perl

Ahora, ${variable## pattern}elimina el patrón coincidente más largo desde el principio y devuelve el resto.

Por lo tanto, if arg=${PATH##:*}debe coincidir con el patrón más largo comenzando con :seguido de cualquier cosa. echo $argdebería regresar/c/Users/USER/bin

Sin embargo, echo $argen mi sistema devuelve el resultado como:

/c/Users/USER/bin:/mingw32/bin:/usr/local/bin:/usr/bin:/bin:/mingw32/bin:/usr/bin:/c/Users/USER/bin:/c/ProgramData/Oracle/Java/javapath:/c/Windows/system32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0:/c/Program Files/Broadcom/Broadcom 802.11 Network Adapter/Driver:/c/Program Files/Toshiba/Bluetooth Toshiba Stack/sys:/c/Program Files/Internet Explorer:/c/Program Files/Common Files/lenovo/easyplussdk/bin:/c/Program Files/Skype/Phone:/cmd:/usr/bin/vendor_perl:/usr/bin/core_perl

De manera similar, echo ${PATH#:*}devuelve el mismo resultado.

/c/Users/USER/bin:/mingw32/bin:/usr/local/bin:/usr/bin:/bin:/mingw32/bin:/usr/bin:/c/Users/USER/bin:/c/ProgramData/Oracle/Java/javapath:/c/Windows/system32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0:/c/Program Files/Broadcom/Broadcom 802.11 Network Adapter/Driver:/c/Program Files/Toshiba/Bluetooth Toshiba Stack/sys:/c/Program Files/Internet Explorer:/c/Program Files/Common Files/lenovo/easyplussdk/bin:/c/Program Files/Skype/Phone:/cmd:/usr/bin/vendor_perl:/usr/bin/core_perl 

Por favor ayúdenme a entender por qué sucede de esta manera. Gracias

Respuesta1

Has colocado el *token global en el lugar equivocado, ponlo antes :ya que estás usando ##(o #) para deshacerte de la porción de la izquierda:

${PATH#*:}  ## Non-greedy
${PATH##*:}  ## Greedy

información relacionada