On Wednesday 23 July 2008 14:46, Lawrence D'Oliveiro wrote: >> In which way is that wrong? > > Maybe not: > > [EMAIL PROTECTED]:~> set +H > [EMAIL PROTECTED]:~> echo "y" > y > [EMAIL PROTECTED]:~> echo "\y" > \y > [EMAIL PROTECTED]:~> echo y > y > [EMAIL PROTECTED]:~> echo \y > y > > That still leaves the issue of the discrepancy between the way bash > actually behaves, and the way it's documented to behave.
It's documented to behave as it behaves. "Enclosing characters in double quotes preserves the literal value of all characters within the quotes, with the exception of $, ‘, \, and, when history expansion is enabled, !. The characters $ and ‘ retain their special meaning within double quotes. The backslash retains its special meaning only when followed by one of the following characters: $, ‘, ", \, or <newline>. A double quote may be quoted within double quotes by preceding it with a backslash. If enabled, history expansion will be performed unless an ! appearing in double quotes is escaped using a backslash. The backslash preceding the ! is not removed." ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ POSIX does not support ! as history expansion character (except perhaps when you put it into PS1, but then it performs a different function). ! has various meanings in POSIX, neither of those is related to history expansion. Where history expansion features conflict with POSIX, bash sticks with POSIX, which looks reasonable to me. If that annoys you, change the value of "histchars" (see man bash) to have the shell use a different character than ! to do history expansion. Or disable history expansion and use fc when you need to manipulate command history, as per POSIX.