я не знаю, что означает, что возвращаемое значениеUnix возвращает значение «-bash»
grep abc Letters
echo $?
0
echo $0
дает «-bash» что означает «-bash» возвращаемое значение означает,
я не знаю, что означает, что возвращаемое значениеUnix возвращает значение «-bash»
grep abc Letters
echo $?
0
echo $0
дает «-bash» что означает «-bash» возвращаемое значение означает,
Возвращение статуса последней командная оболочка представлено $?
:
date
echo $?
0
Здесь 0 означает успешное возвращение из ранее завершенной команды (date
) и любых средств ненулевого значения статус отказа.
Когда вы обращаетесь к $0
, на самом деле это имя исполняемого файла в оболочке, и в вашем случае это -bash
, так как вы используете его на оболочке.
Вопрос следует переместить в https://unix.stackexchange.com/.
Но так или иначе, $0
- это значение переменной, которая содержит имя приложения, выполняющего эту команду. Это как argv[0]
в С.
Пример:
[email protected]:~|⇒ echo $0 # I'm in zsh now
/bin/zsh
[email protected]:~|⇒ bash # let's run bash:
[email protected]:~$ echo $0
bash
[email protected]:~$ sh # we need to go deeper:
$ echo $0
sh
$ zsh # deeper!
[email protected]:~|⇒ echo $0
zsh
[email protected]:~|⇒ # hit Ctrl-D (pop one level):
$ echo $0
sh
$ # pop again:
[email protected]:~$ echo $0
bash
[email protected]:~$ exit # again:
[email protected]:~|⇒ echo $0
/bin/zsh # we're at the starting point now
Значение $0
объясняется в Баш ручной (here, в нижней части страницы):
Дополняет имя сценария оболочки или оболочки. Это устанавливается в инициализации оболочки . Если Bash вызывается с файлом команд (см. Shell Scripts), $ 0 устанавливается на имя этого файла. Если Bash запускается с -c (см. Invoking Bash), то
$0
устанавливается в первый аргумент после строки, которая должна быть выполнена, если таковая имеется. В противном случае он задается именем файла, используемым для вызова Bash, как задано аргументом 0.
(К сожалению, это трудно найти $0
в руководстве Баш, так как он указан как только 0
.)
По соглашению, если текущий bash
процесс является Войти оболочки, $0
(argv[0]
в C термины) изменяется либо на bash
, либо на процесс входа в систему, добавив в начале символ -
.
О некоторых системах, /bin/sh
является символической ссылкой на /bin/bash
. Если это так, и если bash
вызывается через символическую ссылку /bin/sh
, то $0
будет sh
или -sh
.
$?
, также поясняемый в руководстве Bash, «Расширяется до статуса выхода последнего выполненного переднего плана». Более просто, это статус самой последней выполненной команды (в вашем случае grep abc Letters
), обычно 0
, если эта команда преуспела, или некоторое ненулевое значение (часто, но не всегда, 1
), если оно не выполнено.
Классически это был процесс входа в систему, который устанавливал 'argv [0]' to '-bash', чтобы позволить оболочке знать, что это была оболочка входа, а не сама оболочка, которая обычно не может существенно изменить свой список аргументов. –
@JonathanLeffler: быстрый эксперимент на Linux показывает, что программа C, которая выполняет 'argv [0] [0] = '-';', изменяет имя программы, которое появляется на выходе 'ps'. –
OK; У меня больше нет доступа к Solaris, HP-UX, AIX, но я уверен, что они этого не сделали или не сделали (за последние пару лет). Mac OS X принимает изменение (все аргументы). Я помню эту трудность, потому что это было разочарование тем, что не удалось перезаписать пароли, переданные в командной строке на всех платформах Unix. В каком-то соответствующем коде есть комментарий: 'case 'p':/* Пароль - сомнительная безопасность */password = STRDUP (optarg);/* Перезаписать пароль, чтобы уменьшить вероятность его просмотра через ps, но он не делает ничего полезного в Solaris 7. */memset (optarg, 'X', strlen (optarg)); перерыв; '. –
должен быть перенесен на http://unix.stackexchange.com/ –
@ umläute: я не уверен, что его нужно перенести.Это вопрос о программировании, а вопросы программирования, специфичные для Unix, приемлемы для Stack Overflow. (Это также было бы правильным вопросом для сайта Unix.) –
'$ 0' - это не возвращаемое значение; это 'argv [0]'. –