GNU/Linux >> Znalost Linux >  >> Linux

Prostory pro proměnné ve skriptu Bash?

V jednom z názvů adresářů mám mezeru. Chci pod ním vypsat soubor z bash skriptu. Zde je můj skript:

fpath="${HOME}/"New Folder"/foobar.txt"

echo "fpath=(${fpath})"
#fpath="${HOME}/${fname}"

ls "${fpath}"

Výstup tohoto skriptu je:

fpath=(/Users/<username>/"New Folder"/foobar.txt)
ls: /Users/<username>/"New Folder"/foobar.txt: No such file or directory

Ale když je seznam souborů v mém shellu, existuje:

$ ls /Users/<username>/"New Folder"/foobar.txt
/Users/<username>/New Folder/foobar.txt

Existuje způsob, jak mohu získat ls zobrazit cestu z mého skriptu?

Přijatá odpověď:

Stačí odstranit vnitřní dvojité uvozovky:

fpath="${HOME}/New Folder/foobar.txt"

Protože je celý obsah proměnných obsažen ve dvojitých uvozovkách, nemusíte to dělat podruhé. Důvod, proč to funguje z CLI, je ten, že Bash nejprve vyhodnotí uvozovky. V proměnné se nezdaří, protože uvozovky bez zpětného lomítka jsou považovány za doslovnou část cesty k adresáři.


Linux
  1. Jak ladit Bash skript?

  2. Chyba v počítání skriptu pro počet výskytů?

  3. Použít rozšíření .sh nebo .bash pro skripty Bash?

  1. Jak nahradit mezery v názvech souborů pomocí bash skriptu

  2. Shell/Bash zkratka pro hromadné přejmenování souborů ve složce

  3. Spusťte příkaz bash na jenkins pipeline

  1. Jak přidat nové řádky do proměnných ve skriptu Bash?

  2. Neočekávané Eof při hledání shody „““ – Bash Script?

  3. bash + čtení proměnných a hodnot ze souboru pomocí bash skriptu