${PATH#:*} と ${PATH##:*} の出力

${PATH#:*} と ${PATH##:*} の出力

私のシステムのPATH変数の内容は次のとおりです。

> 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

最初${variable## pattern}から最長の一致パターンを削除し、残りを返します。

したがって、ifは何でもarg=${PATH##:*}始まり、次の最も長いパターンと一致する必要があります:echo $arg返す必要があります/c/Users/USER/bin

しかし、echo $arg私のシステムに返される出力は次のとおりです。

/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

同様に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 

なぜこれが起こるのか理解するのを手伝ってください。ありがとう

ベストアンサー1

globタグを間違った場所に配置しました。左側の部分を取り除くために(または)を使用しているので、*ifを前に置いてください。:###

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

おすすめ記事