An Amusing Shell Trick

Sometimes a function takes arguments passed down from a caller like this:

my_fun() {
  do_something_fun "$@"
}

On occasion you need to call something that takes arguments in an awkward order. Today’s example is the pattern argument to fd:

do_find() {
  local d="$1"
  shift
  fd -t f "$@" "$d"
}

The pattern argument is $1 within $@ here. But what if there is only one argument to the do_find call? We should supply an empty argument as the pattern.

I know of two ways to do this. The first is to expand to $@ if $1 is defined:

"${1:+$@}"

The second is to prepend an empty string to the "$@" expansion:

"""$@"

I find this last one both highly amusing and more visually striking than the first. And it’s so simple it took years to see!