I generate a bash variable containing all my args and those args contain spaces. When I launch a command with those args - eg. ls $args - quotes are not correctly interpreted. Here is an example - also creating and erasing needed files.
#!/bin/bash f1="file n1" f2="file n2" # create files touch "$f1" "$f2" # concatenate arguments args="\"$f1\" \"$f2\"" # Print arguments, then launch 'ls' command echo "arguments :" $args ls $args # delete files rm "$f1" "$f2"
With that, I have some "no such file" errors for "file, n1", "file and n2"
$1 means an input argument and -z means non-defined or empty. You're testing whether an input argument to the script was defined when running the script. Follow this answer to receive notifications.
bash [filename] runs the commands saved in a file. $@ refers to all of a shell script's command-line arguments. $1 , $2 , etc., refer to the first command-line argument, the second command-line argument, etc. Place variables in quotes if the values might have spaces in them.
$# is the number of positional parameters passed to the script, shell, or shell function. This is because, while a shell function is running, the positional parameters are temporarily replaced with the arguments to the function. This lets functions accept and use their own positional parameters.
You might consider using an array for the args, something like this:
args=( "$f1" "$f2" ) ls "${args[@]}"
(The problem you're hitting at the moment is that once interpolation has happened there's no difference between intra- and inter- filename spaces.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With