“$” Mı? (dolar-soru işareti) değişkeni yalnızca Bash kabuğunda var mı?


10

In Bashkabuğu, ben üzerinden komut çıkış durumu alabilirsiniz $?değişken:

# ps -ef | grep "haha"
root     15439 15345  0 23:02 pts/0    00:00:00 grep --color=auto haha
# echo $?
0

Sadece Bash kabuğunda var mı? Yoksa diğer kabuklarda da kullanabilir miyim?


8
Herhangi bir POSIX kabuğunda kullanabilirsiniz, özel parametrelerden biridir
cuonglm

Yanıtlar:


19

$?Çıkış kodu POSIX izleyen herhangi kabuk yaygındır ve açıklanan 2.5.2 Özel Parametreleri :

?
En son boru hattının ondalık çıkış durumuna genişler (bkz. Boru Hatları ).


5
Sadece POSIX kabuğu değil, Bourne kabuğu da dahil olmak üzere tüm Bourne benzeri kabuklar (onu tanıtan kişi olduğuna inanıyorum, Mashey kabuğu $rinandığım gibi vardı ). Yani 70'lerin sonlarında Unix V7'den beri neredeyse tüm Unix benzeri sistemlerin sh, Diğer çoğu kabuk (csh, tcsh, balık, rc) gibi $status.
Stéphane Chazelas

2
Ve birçok betik dili: Perl, Ruby, vb.
OrangeDog

13

Thomas Dickey'in dediği gibi, herhangi bir POSIX kabuğu (yani hemen hemen hepsi) sahip olacak $?.

Bu soru beni biraz ilgilendirdi, bu yüzden ellerimi alabileceğim herhangi bir kabukta test ettim:

  • mksh
  • zsh
  • /bin/sh Samsung Galaxy S5 cihazımda
  • /bin/sh yönlendiricimde
  • tcsh
  • ksh
  • dash
  • /bin/sh 1989'dan itibaren sanal UNIX Sistem V'imde
  • cmd.exeve powershell.exeWindows 10 bilgisayarımda

ve $?bu ancak tüm çalıştı fishve cmd.exe.

İki ilginç şey buldu:

1. $?Windows PowerShell'de çalışır!

Bir noktaya. 0 veya daha yüksek bir sayı döndürmek yerine, sadece Trueve False.

PS C:\WINDOWS\system32> echo $?
True
PS C:\WINDOWS\system32> gfdhgfhfdgfdg
gfdhgfhfdgfdg : The term 'gfdhgfhfdgfdg' is not recognized as the name of a cmdlet, ...(big long error output).....
PS C:\WINDOWS\system32> echo $?
False

2. $?kabukta çalışmıyor fish.

Ancak, $?balık yazdığınızda şu mesajı alırsınız:

~$ echo $?
$? is not the exit status. In fish, please use $status.
fish: echo $?

Çok fazla kullanmadım ama şaşırmadım, fishkendi ilginç kabuk diline sahip gibi görünüyor, tamamen farklı bashya da her neyse.


Çoğu kabuk (balık, csh, tcsh, rc, zsh) $statusçok daha basit / okunaklı IMO olan kullanır. Sadece Bourne benzeri kabuklar (Unix kabukları arasında) $?AFAIK kullanır .
Stéphane Chazelas

3
Sadece nasıl okuduğunuza bağlıdır. Zihinsel $?olarak "sh ## oldu mu?" ve bundan sonra, bu özel değişkenin anlamını hiç unutmadım :)

2
@nwildner lol! Sanırım şimdi bunu asla unutmayacağım!
hanetzer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.