Простой ответ с помощью csh
Если вы беспокоитесь только о C Shell, это легко. Это командная строка последней выполненной команды. См. Подстановка переменных в документации tcsh
Простой ответ с Bash
В Bash документация в главе Специальные параметры говорит нам следующее:
При запуске оболочки задайте абсолютный путь, используемый для вызова оболочки или сценария оболочки, который выполняется, как передано в среде или списке аргументов. Впоследствии расширяется до последнего аргумента предыдущей команды после расширения. Также задайте полный путь, используемый для вызова каждой команды, выполненной и помещенной в среду, экспортированную в эту команду. При проверке почты этот параметр содержит имя почтового файла.
Так что в bash это обычно последний аргумент предыдущей команды. Обычно...
Сложный ответ с bash и csh
В вашем случае программа kdeinit была вызвана из оболочки Bash. Перед выполнением kdeinit полный путь к команде ( / usr / bin / kdeinit ) был скопирован bash в переменную окружения подчеркивания, как указано ниже. Программное обеспечение kdeinit инициализировало вашу графическую среду, распространяя эту переменную среды на все дочерние процессы. Поэтому ваш терминал C Shell унаследовал эту переменную среды.
Когда вы находитесь в этой C-оболочке, возникает путаница между переменной оболочки $ _ и переменной среды _ . В C Shell, когда вы используете конструкцию $ name , она выводит переменную оболочки или переменную окружения, если переменная оболочки не существует. В этом случае они оба существуют и различны. Переменная окружения (как показано командой env ) всегда будет напоминать одно и то же значение / usr / bin / kdeinit, в то время как переменная оболочки будет продолжать изменяться, чтобы показать последнюю выполненную команду.
$_
это , как вы бы получить доступ к нему ...?