GNU/Linux >> Znalost Linux >  >> Linux

Shoda vzoru nefunguje ve skriptu bash

Globování takto nefunguje, pokud nepovolíte extglob shell opt. Místo toho doporučuji použít find :

find . -maxdepth 1 -not -name '<NAME>' -or -name '<NAME>' -delete

před spuštěním tohoto příkazu s -delete ujistěte se, že výstup je správný


Metoda s výchozím nastavením a bez externích procesů:

for f in *; do [[ $f =~ ^file[12]$ ]] || echo "$f"; done

Rozšířená syntaxe glob, kterou se pokoušíte použít, je ve výchozím nastavení vypnutá; musíte jej povolit samostatně v každém skriptu, kde jej chcete použít.

shopt -s extglob

Skripty by neměly používat ls i když si myslím, že jste to zde používali pouze jako zástupný symbol.


Linux
  1. Linux – Proč Setuid nefunguje?

  2. Ve skriptu Bash Jak funguje příkaz Continue s vestavěnými smyčkami?

  3. Proč nefunguje automatické dokončování při zadávání názvu příkazu za „zdroj“?

  1. Příkaz Rm ve skriptu Bash nefunguje s proměnnou?

  2. Proč to „při čtení“ funguje v terminálu, ale ne ve skriptu Shell?

  3. Jak funguje cat << EOF v bash?

  1. Soubor metadat neodpovídá kontrolnímu součtu – chyba YUM!

  2. Proč substituce procesu Bash nefunguje s některými příkazy?

  3. Porovnávání vzorů skriptů Bash