Shell script to display environment variables
Readability

Just because Bash let's you cram a lot of statements on a single line doesn't mean you should.
I recommend to split this up to multiple lines,
and also to put spaces around |, like this:

#!/bin/bash

PAGER=more
if less &gt;/dev/null; then
    PAGER=less
fi
echo $PAGER

if [ -z ${1+x} ]; then
    printenv | "$PAGER"
else
    printenv | grep "$1" | "$PAGER"
fi


But if you like compact writing style,
a reasonable compromise is to replace the first if statement with an alternative writing style using &amp;&amp; like this:

less &gt;/dev/null &amp;&amp; PAGER=less


Error handling

I'm not sure if it's intentional,
but if the less command doesn't exist (but in most systems it does),
this line will emit an error message:


if type less &gt;/dev/null



To avoid errors, you want to suppress stderr too in addition to stdout:

if type less &gt;/dev/null 2&gt;&amp;1


Prefer simple solutions

This is hacky, cryptic:


if [ -z ${1+x} ]; then



I suggest a much more readable, simple equivalent:

if [ -z "$1" ]; then


Don't repeat yourself

The printenv command is repeated in both branches of the last if statement.
You could move it in front of the if, like this:

printenv | \
if [ -z "$1" ]; then
    "$PAGER"
else
    grep "$1" | "$PAGER"
fi


However, in this writing style it's important that the \ on the line before the if is the last character on the line directly in front of the line break.