Saída de $ {PATH #: *} e $ {PATH ##: *}

0

O conteúdo da variável PATH no meu sistema é o seguinte:

> 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

Agora, ${variable## pattern} exclui o padrão de correspondência mais longo do início e retorna o restante.

Portanto, se arg=${PATH##:*} deve corresponder ao padrão mais longo começando com : seguido por qualquer coisa. echo $arg deve retornar /c/Users/USER/bin

No entanto, echo $arg no meu sistema retorna a saída 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

Similarmente, echo ${PATH#:*} retorna a mesma saída

/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 me ajude a entender por que isso está acontecendo dessa maneira. Obrigado

    
por MathMan 24.10.2016 / 12:17

1 resposta

2

Você colocou o token * glob no lugar errado, coloque if antes de : enquanto estiver usando ## (ou # ) para se livrar da parte da esquerda:

${PATH#*:}  ## Non-greedy
${PATH##*:}  ## Greedy
    
por 24.10.2016 / 12:23

Tags