3
\$\begingroup\$

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=more
if type less > /dev/null;then PAGER=less; fi
echo $PAGER
if [ -z ${1+x} ]; then printenv|"$PAGER"; else printenv|grep "1ドル"|"$PAGER"; fi

If 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.

Jamal
35.2k13 gold badges134 silver badges238 bronze badges
asked Jun 25, 2016 at 11:44
\$\endgroup\$
0

1 Answer 1

3
+50
\$\begingroup\$

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 >/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 && like this:

less >/dev/null && 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 >/dev/null

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

if type less >/dev/null 2>&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.

answered Jul 5, 2016 at 20:09
\$\endgroup\$

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.