Co w przypadku powłoki Linux ma wykonać echo 1 $?

11

Robię a echo $1, wypisuje domyślną używaną powłokę logowania.

Ale echo $2odtąd wszystko, co otrzymuję, to nowa linia. Dlaczego?

Lazer
źródło

Odpowiedzi:

21

1 $ (lub 2 $, 3 $ ...) ma być argumentami podanymi dla jakiegoś skryptu.

Oto przykładowy skrypt:

#!/bin/bash

echo "\$1 is now $1"
echo "\$2 is now $2"
echo "\$3 is now $3"

I przykładowy wynik

jaba@lappy:/tmp$ ./example.sh 
$1 is now 
$2 is now 
$3 is now 
jaba@lappy:/tmp$ ./example.sh 1 2 3
$1 is now 1
$2 is now 2
$3 is now 3
Janne Pikkarainen
źródło
1
A $ 0 to nazwa wykonywanego scipt, analogicznie do argv.
Benjamin Bannier
4

1 $ jest argumentem przekazywanym za skrypt powłoki.

Załóżmy, że biegniesz

./myscript.sh hello 123 

następnie

1 $ będzie cześć

2 USD wyniesie 123

Mukesh Chapagain
źródło
3

W twoim przypadku $ 1 drukuje domyślną powłokę logowania, ponieważ ten argument został przekazany do skryptu, który uruchamia powłokę logowania. Ale jeśli napiszesz i uruchomisz własny skrypt w bieżącej sesji, 1 $, 2 $ ... będą parametrami, które wyślesz do skryptu.

Michaił Czernykh
źródło