Что означает! $ В скриптах Bash?

При чтении содержимого сценария я обнаружил что-то вроде:

echo "An Example" > !$

Так что мне интересно, что означает !$ в bash.

5
задан 10 July 2014 в 23:38

2 ответа

Хорошо я нашел это! Средства $ последний аргумент так для примера:

touch /tmp/file1

Здесь аргумент /tmp/file1, таким образом ! $ заменил /tmp/file1 в примере эха.

затем при вводе команды du -b !$ вывод будет использованием диска в байтах для /tmp/file1

4
ответ дан 10 July 2014 в 23:38

От man bash (где-нибудь после строки 3813):

!      Start  a  history substitution, except when followed by a blank,
          newline, carriage return, = or ( (when the extglob shell  option
          is enabled using the shopt builtin).

[...]

$      The  last  word.   This  is  usually the last argument, but will
          expand to the zeroth word if there is only one word in the line.

Так, !$ вспомнит последний аргумент от последней команды из истории.

Вот некоторые примеры и эквиваленты:

$ echo foo bar
foo bar
$ echo !$ # recall the last argument from the last command from history
echo bar
bar

$ echo foo bar
foo bar
$ echo !:$ # the same like `!$'
echo bar
bar

$ echo foo bar
foo bar
$ echo !:2  # recall the second (in this case the last) argument from the last command from history
echo bar
bar

$ echo foo bar
foo bar
$ echo $_ # gives the last argument from the last command from history
bar

$ echo foo bar
foo bar
$ echo Alt+. # pressing Alt and . (dot) in the same time will automatically insert the last argument from the last command from history
bar

$ echo foo bar
foo bar
$ echo Alt+_ # the same like when you press Alt+.
bar

$ echo foo bar
foo bar
$ echo Esc. # the same like when you press Alt+.
bar

Все они будут работать только в интерактивной оболочке. Но если Вы используете ту команду от своего вопроса в сценарии, поскольку Вы сказали сев его затем вещи отличаются: когда Вы запустите скрипт, это запустится в новой оболочке, неинтерактивная оболочка, таким образом, расширение истории не делает, имеет любой эффект в этом случае и так команда:

echo "An Example" > !$

создает файл !$ если не существующий (иначе перезаписывает его), и запись An Example в него.

9
ответ дан 10 July 2014 в 23:38

Другие вопросы по тегам:

Похожие вопросы: