lina wrote: > how to understand > echo ${PATH#*:} > > the #*: > I don't get it. why the first path before : was gone.
This is really a help-bash question. Please send all follow-ups there. The documentation says: ${parameter#word} ${parameter##word} Remove matching prefix pattern. The word is expanded to produce a pattern just as in pathname expansion. If the pattern matches the beginning of the value of parameter, then the result of the expansion is the expanded value of parameter with the shortest matching pattern (the ``#'' case) or the longest matching pat- tern (the ``##'' case) deleted. If parameter is @ or *, the pattern removal operation is applied to each positional parame- ter in turn, and the expansion is the resultant list. If param- eter is an array variable subscripted with @ or *, the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list. Since PATH is a series of directories separated by colons "#*:" will match and therefore remove the first element of the PATH. $ foo=one:two:three $ echo ${foo#*:} two:three And using two pound signs "##" would match the loggest pattern and remove all up through the last one. $ echo ${foo##*:} three Bob