On 20. Nov 2006, at 11:10, Hans-Joerg Bibiko wrote:
to avoid the ! error you can use '' instead of "" but then it complicates a bit the BASH function
! refers to a history event, i.e. something you previously typed, e.g. !! is previous line, !$ is last argument of previous line, !# is current line, !#:1 is first argument of first line, etc. These are actually quite handy, here are some examples:
? 43*37.34*7.45 # do some calculation eur `!!` # convert the result of last line from euro # (both ? and eur are custom functions)
chmod a+w /path/to/some/file # make file word writeable ls -l !$ # check if the file has proper mode
cp some_filename.txt backup_!#:1 # make backup, re-using the name
History substitution can do much more, like even search backwards, but the above are the most common use-cases for me.
Anyway, in double quoted strings, bash does expand various things, like $VARIABLES, `code` and these history events. So you definitely want to use single quoted strings, where the only thing you need to take care of, is apostrophes.
Why you can’t escape it in a double-quoted string is weird, one solution though would be to escape it by first closing the string, i.e.: echo "foo"!" bar".
As for arrays and sub-shells, I think you mean sub-processes, i.e. the array cannot be exported to new processes you launch from the shell (since arrays are bash-only), but would that matter? If you start a new process, chances are that process is a scripting language that can parse property lists.