Skip to content

Instantly share code, notes, and snippets.

View rafaelmaeuer's full-sized avatar

Rafael M. rafaelmaeuer

View GitHub Profile

General rule: quote it if it can either be empty or contain spaces (or any whitespace really) or special characters (wildcards). Not quoting strings with spaces often leads to the shell breaking apart a single argument into many.

$? doesn't need quotes since it's a numeric value. Whether $URL needs it depends on what you allow in there and whether you still want an argument if it's empty.

I tend to always quote strings just out of habit since it's safer that way.

if [[ $(arch) == 'arm64' ]]; then
export DOCKER_DEFAULT_PLATFORM=linux/amd64
fi
do shell script "command" user name "username" password "pass" with administrator privileges
# variable $# is the number of input arguments
if [ $# -eq 0 ]
then
echo "No arguments supplied"
fi
# check if an argument is an empty string or not
if [ -z "$1" ]
then
echo "No argument supplied"
# -n operator: check if var is not empty
VAR="test"
if [ -n "$VAR" ]; then
echo "$VAR is not empty"
fi
# -z operator: check if var is empty
VAR=""
if [ -z "$VAR" ]; then
echo "$VAR is empty"
# The script receives the limit as an argument.
limit=$1
number_of_files=$(ls ./files | wc -l)
if [ $number_of_files -gt $limit ]
then
# There are more files than the limit
# So we need to remove the older ones.
cd files
wrappedProgram "$@"
# ^^^ this is correct and will hand over all arguments in the way
# we received them, i. e. as several arguments, each of them
# containing all the spaces and other uglinesses they have.
wrappedProgram "$*"
# ^^^ this will hand over exactly one argument, containing all
# original arguments, separated by single spaces.
wrappedProgram $*
# ^^^ this will join all arguments by single spaces as well and
# will then split the string as the shell does on the command