GNU/Linux >> Znalost Linux >  >> Linux

Co dělá % v řetězcích shellu Linux?

Když % se používá ve vzoru ${variable%substring} vrátí obsah variable s nejkratším výskytem substring odstraněn ze zadní strany variable .

Tato funkce podporuje vzory zástupných znaků – proto přijímá hvězdičku (hvězdičku) jako náhradu za nula nebo více znaků.

Je třeba zmínit, že toto je specifické pro Bash - ostatní linuxové shelly tuto funkci nutně neobsahují.

Pokud se chcete dozvědět více o manipulaci s řetězci v Bash, velmi doporučuji přečíst si tuto stránku. Kromě dalších užitečných funkcí - například - vysvětluje, co dělá %% udělat :)

Edit:Zapomněl jsem to zmínit, když je použit ve vzoru $((variable%number)) nebo $((variable1%$variable2)) % znak bude fungovat jako modulo operátor. DavidPostill má ve své odpovědi konkrétnější odkazy na dokumentaci.

Když % se používá v jiném kontextu, měl by být rozpoznán pouze jako běžný znak.


Bash Reference Manual:Shell Parameter Expansion

${parameter%word}
${parameter%%word}

slovo je rozbalen tak, aby vytvořil vzor stejně jako u rozbalení souboru. Pokud se vzor shoduje se zadní částí rozšířené hodnoty parametru , pak výsledkem expanze je hodnota parametru s nejkratším odpovídajícím vzorem (‘%’ case) nebo nejdelší odpovídající vzor (‘%%’ případ) smazán. Pokud parametr je ‘@’ nebo ‘*’, operace odstranění vzoru se postupně aplikuje na každý poziční parametr a rozšíření je výsledný seznam. Pokud parametr je proměnná pole s indexem ‘@’ nebo ‘*’, operace odstranění vzoru se postupně aplikuje na každý člen pole a rozšíření je výsledným seznamem.


Experimentováním jsem zjistil, že shoda za % je zahozena, když je řetězec uzavřen ve složených závorkách (složených závorkách).

Pro ilustraci:

touch abcd         # Create file abcd

for file in ab*; do
 echo $file        # echoes the filename
 echo $file%       # echoes the filename plus "%"
 echo ${file%}     # echoes the filename
 echo "${file%}"   # echoes the filename
 echo
 echo "${file%c*}" # Discard anything after % matching c*
 echo "${file%*}"  # * is not greedy
 echo ${file%c*}   # Without quotes works too
 echo "${file%c}"  # No match after %, no effect
 echo $file%c*     # Without {} fails
done

Zde je výstup:

abcd
abcd%
abcd
abcd

ab
abcd
ab
abcd
abcd%c*

Linux
  1. Linux – Co dělá „Make Localmodconfig“?

  2. Co znamená `:-` ve skriptu Shell?

  3. Linux – Co dělá linuxová možnost „nointremap“?

  1. Co dělá Echo $? Dělat??

  2. Co znamená - v tomto linuxovém příkazu?

  3. Co dělá `set -x`?

  1. linuxový shell wc -c počet znaků +1

  2. Linuxový init skript, čeho dosáhne 0<&- &>

  3. Co znamená přípona .d v Linuxu?