GNU/Linux >> Znalost Linux >  >> Linux

Linux rozděluje pole do samostatných proměnných?

Roky programuji na MVS a nedávno používám Linux, takže moje linuxové dovednosti ještě nejsou tak skvělé, ale vývojovým konceptům rozumím dobře.

Snažím se číst adresář souborů a převzít názvy všech souborů s příponou .trg. Pak musím vzít tyto názvy a uložit je do samostatných proměnných, abych je mohl později použít ve svém skriptu k odkazování na komponenty a jejich použití pro pojmenování souborů. Názvy souborů jsem získal pomocí příkazu find:

param=`find *${file_name}*.trg

Tím vznikla proměnná $param načtená hodnotami (ABC1099R ABC1099C), protože jde o dva soubory v adresáři s názvem ABC1099R.trg a ABC1099C.trg. Nyní musím tyto hodnoty přiřadit jednotlivým proměnným, abych je mohl později použít ve svém skriptu. Hledal jsem na webu vysoko i nízko, ale každý příklad, který najdu, používá echo k jejich pouhému zobrazení, nebo používají smyčku do while a používají jednotlivé hodnoty v rámci smyčky. Potřebuji je mít přiřazené k jejich vlastním proměnným, aby mi byly k dispozici později ve skriptu.

Zpočátku jsem zkusil cyklus for do takto:

for trigger_files in $param; do
    app1=(basename "{trigger_files}" .trg).dat
done

Ale to dává pouze první výskyt app1=ABC1099R

Potřebuji mít všechny výskyty uložené do jejich vlastní individuální proměnné. Mohlo by existovat potenciálně 20 názvů souborů, ale usoudil jsem, že to potřebuji zprovoznit se dvěma, takže by to zvládlo mnoho.

Přijatá odpověď:

Pokud používáte bash, zvažte, zda to udělat bash způsobem.

Vaše pole by bylo získáno takto (žádné externí find příkaz):

params=( *${file_name}*.trg )

a pak procházíte polem takto:

for file in "${params[@]}"; do
    echo "I'm happily reading the beautiful file $file"
done

Pokud chcete odstranit .trg a nahraďte jej .banana :

for file in "${params[@]}"; do
    echo "My gorilla loves the file ${file%.trg}.banana"
done

Tato metoda, se správným citováním, bude 100% bezpečná, pokud jde o soubory s vtipnými symboly v jejich názvech.

Poznámka. Vždy používejte globbings buď s shopt -s nullglob nebo shopt -s failglob .


Linux
  1. Linux – všechno je soubor?

  2. Číst soubor do pole?

  3. Jak převedu obraz disku Linux na řídký soubor?

  1. Jak přesunout soubor v Linuxu

  2. Vysvětlení oprávnění souborů v systému Linux

  3. Ukládají se úpravy souborů v Linuxu přímo na disk?

  1. Linux Tail Command

  2. Linux Touch Command

  3. Cat Command v Linuxu