GNU/Linux >> Znalost Linux >  >> Linux

$_ vs! $. Poslední argument předchozího příkazu a přesměrování výstupu?

Otázka se týká speciálních proměnných. Dokumentace říká:

!!:$

označuje poslední argument předchozího příkazu . Toto může
být zkráceno na !$ .

($_ , podtržítko.) Při spuštění shellu nastavte absolutní cestu použitou k vyvolání shellu nebo skriptu shellu, který se provádí tak, jak je předán v
prostředí nebo seznamu argumentů. Následně se rozvine na poslední argument předchozího příkazu po expanzi. Nastavte také na úplnou cestu použitou k vyvolání každého příkazu provedeného a umístěného v prostředí
exportovaném do tohoto příkazu.

Musí tam být nějaký rozdíl, který nedokážu zachytit, protože:

$ echo "hello" > /tmp/a.txt
$ echo "!$"
echo "/tmp/a.txt"
/tmp/a.txt

$ echo "hello" > /tmp/a.txt
$ echo $_
hello

Jaký je rozdíl?

Přijatá odpověď:

!$ je slovní označení rozšíření historie, expanduje na poslední slovo předchozího příkazu v historii . IOW, poslední slovo předchozího záznamu v historii. Toto slovo je obvykle posledním argumentem pro příkaz, ale ne v případě přesměrování. V:

echo "hello" > /tmp/a.txt

celý příkaz 'echo "hello" > /tmp/a.txt' se objevil v historii a /tmp/a.txt je poslední slovo tohoto příkazu.

_ je parametr shellu, expanduje na poslední argument předchozího příkazu. Zde přesměrování není součástí argumentů předávaných příkazu, takže pouze hello je argument předaný do echo . Proto $_ rozšířeno na hello .

_ již není jedním ze standardních speciálních parametrů shellu. Funguje v bash , zsh , mksh a dash pouze když je interaktivní, ksh93 pouze když jsou dva příkazy na samostatných řádcích:

$ echo 1 && echo $_
1
/usr/bin/ksh

$ echo 1
1
$ echo $_
1

Linux
  1. Práce s Input Output a přesměrováním chyb v Linuxu

  2. Jak zachytit terminálové relace a výstup pomocí příkazu skriptu Linux

  3. Jak získat přístup k poslednímu argumentu komentovaného příkazu?

  1. 3 triky, jak získat výstup více příkazů ve stejném řádku

  2. CentOS / RHEL :Jak získat datum a čas provedeného příkazu ve výstupu příkazu historie

  3. Připojte konec řádku k výstupu příkazu

  1. Předat výstup předchozího příkazu dalšímu jako argument?

  2. Výstup „posledního“ příkazu?

  3. Různé barvy pro příkaz a výstup