GNU/Linux >> Znalost Linux >  >> Linux

základní jméno s mezerami ve skriptu bash?

Problém je v tom, že $1 v

MYBASENAME="`basename $1`" 

není citován. Místo toho použijte toto:

MYBASENAME="$(basename "$1")"

Chybí vám jedna sada uvozovek!

MYBASENAME="`basename \"$1\"`"

To váš problém vyřeší.


V případě, kdy je přiřazení nahrazení jedním příkazem, nemusíte uvádět substituci příkazu. Shell neprovádí dělení slov pro přiřazení proměnných.

MYBASENAME=$(basename "$1")

je vše, co je potřeba. Měli byste si zvyknout používat $() místo zpětných zaškrtnutí, protože $() vnořuje se snadněji (je to mimo jiné POSIX a všechny moderní shelly to podporují.)

PS:Měli byste to zkusit ne napište bash skripty. Zkuste napsat shell skripty. Rozdíl je v nepřítomnosti bashismů, zshismů atd. Stejně jako pro C je přenositelnost žádanou vlastností skriptů, zvláště pokud ji lze snadno dosáhnout. Váš skript nepoužívá žádné bashismy, takže bych napsal #!/bin/sh namísto. Pro hnidopichy:Ano, já vím, starý SunOS a Solaris /bin/sh nerozumím $() ale /usr/xpg4/bin/sh je POSIX shell.


Linux
  1. Máte potíže ve skriptu s mezerami v názvu souboru?

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

  3. Zavolejte skript Python z bash s argumentem

  1. Nahraďte mezery podtržítky pomocí BASH

  2. Přidání do $PYTHONPATH pomocí bash skriptu

  3. Jak zabít python skript pomocí bash skriptu

  1. Který Shell Interpreter spouští skript s No Shebang?

  2. Bash skript s `set -e` se nezastaví při příkazu `… &&…`?

  3. Předávání názvu souboru s mezerami do skriptu Shell?