This shell script writes my environment variables. If there is an argument, the shell script will grep for the argument in the environment variables.PAGER=moreif type less > /dev/null;then PAGER=less; fiecho $PAGERif [ -z ${1+x} ]; then printenv|$PAGER; else printenv|grep $1|$PAGER; fiIf the above script is correct then I will work on my shell to be able to parse it. It can parse everything except the last line, which I added today.
Shell script to display environment variables
bash;shell
ReadabilityJust 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/bashPAGER=moreif less >/dev/null; then    PAGER=lessfiecho $PAGERif [ -z ${1+x} ]; then    printenv | $PAGERelse    printenv | grep $1 | $PAGERfiBut if you like compact writing style,a reasonable compromise is to replace the first if statement with an alternative writing style using && like this:less >/dev/null && PAGER=lessError handlingI'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 >/dev/nullTo avoid errors, you want to suppress stderr too in addition to stdout:if type less >/dev/null 2>&1Prefer simple solutionsThis is hacky, cryptic:if [ -z ${1+x} ]; thenI suggest a much more readable, simple equivalent:if [ -z $1 ]; thenDon't repeat yourselfThe 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    $PAGERelse    grep $1 | $PAGERfiHowever, 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.