On Feb 26, 2016 11:08 PM, "Jean-Baptiste Thomas" <cau2jeaf1ho...@laposte.net> wrote: > > De: "Himanshu Shekhar" <irm2015...@iiita.ac.in> > > > Also, I would love to know about good sources to learn and practice > > Bash. I followed "The Linux Command Line by William E. Shotts". > > Chris F A Johnson has written two books on the subject. Haven't > read them but he used to be a regular on comp.unix.shell and he > seems to know what he's talking about. > > /Shell Scripting Recipes: A Problem-Solution Approach/ > http://cfajohnson.com/books/cfajohnson/ssr/ > > /Pro Bash Programming: Scripting the GNU/Linux Shell/ > http://cfajohnson.com/books/cfajohnson/pbp/ >
Thanks for reference. :) > > > 6) Lots of variable references without double quotes around them, > > > EG when calling configure_apt(). What if, say, the password > > > contains white space or "?" or "*" or "[" ? > > > > Please tell me about how to read special characters as @, ? etc. in > > password, as @ is the point after authentication where IP starts. > > I'm not sure I understand the question. I don't expect read to > have problems with occurrences of "@" or "?" in its input (but > see its -r option). > > The problem is not stuffing shell metacharacters into a > variable, it's what happens when you reference that variable. > Suppose variable v contains "*" (an asterisk). Compare the > output of > > echo "$v" > > and that of > > echo $v > > Or set v to "a b" then contrast the result of > > mkdir "$v" > > with > > mkdir $v > > The explanation is that when you write a command line like > > cmd $v > > the shell splits the value of v into words, performs pathname > expansion on each word and uses the result of that as the > arguments to cmd. You might intend to pass one argument to cmd > but you may end up passing zero, two or a thousand. > > Sometimes, that is what you want. But usually what you want is > to pass one argument equal to the value of v. The syntax for > that is : > > cmd "$v" > > This also applies to constructs like if [ condition ]. When > someone writes > > if [ $variable = "constant" ] > > there's a high probability that he or she really means > > if [ "$variable" = constant ] > The problem is about reading metacharacters. For example, username is "harry", password is "harry@123" , proxy server "10.101.12.1:8080". Thus, apt.conf would have text "http://harry:harry@123@10.101.12.1:8080". This leads to unwanted behaviour. Apt stops reading the password after the first @, but it should after the last one. How to resolve this?