I have a shell script and when invoking it ./test it asks for an input.I 've seen a quicker way just by writing at once ./test myInput ,how is that achievable?
1 Answer
You can access the command line arguments in your shell script with the special variables $1, $2 until $9. $0 is the name of your script.
If you need access more than 9 command line arguments, you can use the shift command. Example: shift 2 renames $3 to $1, $4 to $2 etc.
Please remember to put the arguments inside doubles quotes (e.g. "$1"), otherwise you can get problems if they contain whitespaces.
-
4You can use "double-digit" parameters directly, just use braces:
echo ${12}glenn jackman– glenn jackman2013-12-09 18:19:55 +00:00Commented Dec 9, 2013 at 18:19 -
Also,
$#gives you the number of arguments. For example, with./test.sh a b c,$#would evaluate to 3.DoxyLover– DoxyLover2013-12-09 20:18:37 +00:00Commented Dec 9, 2013 at 20:18 -
@glennjackman – should I be using the quotes around the parameter as in
echo "${12}"or is the syntax sufficient asecho ${12}. What is the difference?crs1138– crs11382018-01-26 13:59:07 +00:00Commented Jan 26, 2018 at 13:59 -
Using double quotes will prevent the shell from performing word splitting and filename expansion. Use of braces allows you to use double-digit positional parameters, and to disambiguate variable names from surrounding text.glenn jackman– glenn jackman2018-01-26 14:38:12 +00:00Commented Jan 26, 2018 at 14:38
-
Demo:
set -- one two three four five six seven eight nine ten eleven "12 twelve"; printf "%s\n" "${12}"; printf "%s\n" ${12}glenn jackman– glenn jackman2018-01-26 14:38:56 +00:00Commented Jan 26, 2018 at 14:38