Ausgabe von ${PATH#:*} und ${PATH##:*}

Ausgabe von ${PATH#:*} und ${PATH##:*}

Der Inhalt der PATH-Variable auf meinem System ist wie folgt:

> 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

Löscht nun ${variable## pattern}das am längsten passende Muster vom Anfang und gibt den Rest zurück.

Daher arg=${PATH##:*}sollte es mit dem längsten Muster übereinstimmen, das mit beginnt, :gefolgt von irgendetwas. echo $argsollte zurückgeben/c/Users/USER/bin

echo $argAuf meinem System wird die Ausgabe jedoch folgendermaßen zurückgegeben:

/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

Gibt in ähnlicher Weise echo ${PATH#:*}die gleiche Ausgabe zurück

/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 

Bitte helfen Sie mir zu verstehen, warum das so passiert. Danke

Antwort1

Sie haben das *Glob-Token an der falschen Stelle platziert. Setzen Sie es davor, da Sie (oder ) :verwenden, um den Teil von links loszuwerden:###

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

verwandte Informationen