私のシステムの 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