foo="/sdf/here/jfds"
bar="${foo##*/}"
キャニオンは「${foo##*/}
"式は、最後のスラッシュ(つまりjfds)の後に文字列を返すことを理解しているため機能しますが、どのように(またはこのタイプの式が何と呼ばれるか)わかりません。
これは、一般的にシェル拡張と呼ばれるいくつかのシェル機能の1つです。この特定の展開は、パラメータ展開*と呼ばれます。
この特定のシェル拡張フォームは、left-truncate文字列関数と考えることができます。次のように中括弧を使用する必要があります(これはオプションではありません)。
_#
_を1つだけ使用する場合は、次のパターンの最初のオカレンスのみを左切り捨てすることを意味します(最後の_}
_まで。 2つの_##
_を使用します。これは、左切り捨てすべての連続したパターン一致を意味します。_var="a/b/c"; echo ${var#*/}
_の結果は_b/c
_... _echo ${var##*/}
_はc
を返します。
補完的なright-truncateがあります。 _%
_...の代わりに_#
_を使用します(_#
_はbashコメントのようなものであるため、常に左側にあります)。
_*
_は、bashワイルドカード展開として扱われます。
これは、すべてのシェル拡張のリストであり、優先順位で示されています。
拡張の順序は次のとおりです。
_1. brace expansion ... prefix{-,\,}postfix # prefix-postfix prefix,postfix
.. {oct,hex,dec,bin} # oct hex dec bin
. {a..b}{1..2} # a1 a2 b1 b2
. {1..04} # 01 02 03 04
. {01..4} # 01 02 03 04
. {1..9..2} # 1 3 5 7 9
. \$\'\\x{0..7}{{0..9},{A..F}}\' # $'\x00' .. $'\x7F'
2. tilde expansion .... ~ # $HOME
... ~axiom # $(dirname "$HOME")/axiom
... ~fred # $(dirname "$HOME")/fred
.. ~+ # $PWD (current working directory)
.. ~- # $OLDPWD (previous working directory. If OLDPWD is unset,
~- is not expanded. ie. It stays as-is,
regardless of the state of nullglob.)
# Expansion for Directories in Stack. ie.
# The list printed by 'dirs' when invoked without options
. ~+N # Nth directory in 'dirs' list (from LHS)
. ~-N # Nth directory in 'dirs' list (from RHS)
3. parameter expansion .... ${VAR/b/-dd-}
... ${TEST_MODE:-0}
.. ${str: -3:2} # note space after :
. ${#string}
4. (processed left-to-right)
variable expansion
arithmetic expansion
command substitution
▶5. Word splitting # based on $IFS (Internal Field Seperator)
▷6. pathname expansion
according to options such as:
nullglob, GLOBIGNORE, ...and more
# Note: ===============
▶ 5. Word splitting ↰
▷ 6. pathname expansion ↰
# ===================== ↳ are not performed on words between [[ and ]]
_