On Fri, Oct 19, 2018 at 09:41:41PM +0200, Ricky Tigg wrote: > Built-in function 'set' produces variable outputs.
> $ export SSLKEYLOGFILE=/home/user/test > > $ set | grep SSL > SSLKEYLOGFILE=/home/user/test > _=SSLKEYLOGFILE This is not a bug. The Special Parameter "_" is explained in the manual: _ At shell startup, set to the absolute pathname used to invoke the shell or shell script being executed as passed in the envi‐ ronment or argument list. Subsequently, expands to the last argument to the previous command, after expansion. Also set to the full pathname used to invoke each command executed and placed in the environment exported to that command. When check‐ ing mail, this parameter holds the name of the mail file cur‐ rently being checked. What you're seeing is simply that the varying content of $_ sometimes matches your grep, and sometimes not. wooledg:~$ true wooledg:~$ echo "$_" true wooledg:~$ true blue wooledg:~$ echo "$_" blue wooledg:~$ true blue | grep foo wooledg:~$ echo "$_" wooledg:~$ X=Y wooledg:~$ echo "$_" wooledg:~$ export X=Y wooledg:~$ echo "$_" X In your example, after the export command, $_ contains "SSLKEYLOGFILE" and therefore it matches your first grep. However, after that grep command finishes, $_ is empty (I don't know why -- possibly because each "command" of the pipeline runs in a subshell?), and so it does NOT match your second grep.