GNU/Linux >> Znalost Linux >  >> Linux

Proč se Tilda (~) nerozšíří uvnitř dvojitých uvozovek?

Podle této odpovědi a mého vlastního chápání se vlnovka rozšiřuje do domovského adresáře:

$ echo ~
/home/braiam

Nyní, kdykoli chci, aby expanze shellu fungovala, tj. E. pomocí názvů proměnných, jako je $FOO a neporušujte kvůli neočekávaným znakům, jako jsou mezery atd. měli byste používat dvojité uvozovky " :

$ FOO="some string with spaces"
$ BAR="echo $FOO"
$ echo $BAR
echo some string with spaces

Proč toto rozšíření nefunguje s vlnovkou?

$ echo ~/some/path
/home/braiam/some/path
$ echo "~/some/path"
~/some/path

Přijatá odpověď:

Důvodem je, že uvnitř dvojitých uvozovek je vlnovka ~ nemá žádný zvláštní význam, je považováno za doslovné.

POSIX definuje dvojité uvozovky jako:

Uzavření znaků do uvozovek ( “” ) zachová
doslovnou hodnotu všech znaků v uvozovkách, s
výjimkou znaků dolaru, zpětné uvozovky a zpětného lomítka,

Aplikace zajistí, aby před dvojitou uvozovkou bylo
zpětné lomítko, které má být zahrnuto do uvozovek. Parametr ‚@‘ má
zvláštní význam uvnitř dvojitých uvozovek

Kromě $ , ` , a @ , ostatní znaky jsou považovány za doslovné uvnitř dvojitých uvozovek.


Linux
  1. Proč server zablokoval moji IP?

  2. Kdy je nutné dvojité uvozování?

  3. Proč je Printf lepší než Echo?

  1. Proč stránky Unix Man Pages používají dvojité zaškrtnutí místo dvojitých uvozovek?

  2. Proč `md5sum` nedává stejný hash jako internet?

  3. Jaký je rozdíl mezi středníkem a dvojitým ampersandem &&?

  1. Citáty uvnitř Backticks Vnitřní nabídky v Ksh?

  2. Jak vidět, že se přesný příkazový řádek spouští uvnitř některé instance Bash?

  3. Proč Ls -l neukazuje čas a rok pro každý soubor?