Re: printf "%q" and $'...'

2009-11-25 Thread Antonio Macchi
The answer is in the part you neglected to read. NULL can be passed to function only "escaped" \0 \x00 but $'\x00' is not like "\x00", because the first is expanded "before", and the second is expanded "after" $ printf $'\x00' +-+-+-+-+-+-+--+ +--+--+ |p|r|i|n|t|f|\0| |\0|\0| +-+-+-+-+-

Re: printf "%q" and $'...'

2009-11-25 Thread pk
Antonio Macchi wrote: > but... > > $ printf one$'\x00'two\\n > > +-+-+-+-+-+-+--+ > |p|r|i|n|t|f|\0| > +-+-+-+-+-+-+--+ > > +-+-+-+--+-+-+-+--+--+ > |o|n|e|\0|t|w|o|\n|\0| > +-+-+-+--+-+-+-+--+--+ > > so the output should be "one", and stop here! > > but the real output is > onetwo > > so, i

Re: printf "%q" and $'...'

2009-11-25 Thread pk
Antonio Macchi wrote: >> $ printf "\x00\n" | cat -A >> ^@ > > it works, so why... > > $ printf $'\x00' | cat -A > $ Read carefully ALL the answers you've been given. The short version is that $'\x00' is interpreted by bash itself, while '\x00\n' is interpreted by printf only. But DO READ the

Re: printf "%q" and $'...'

2009-11-25 Thread Lhunath (Maarten B.)
On 25 Nov 2009, at 16:27, Antonio Macchi wrote: >> imadev:~$ echo $'foo\0bar' >> foo > > > sorry... I'm a little bit confusing... look > > $ echo foo$'\0'bar > foobar > I expect $'\0' expands to the C-string ''. Which then gets added to the argument after 'foo' and before 'bar'.

Re: printf "%q" and $'...'

2009-11-25 Thread Antonio Macchi
When you run read -d $'\x00' what you're really doing is setting up a bunch of C-strings in memory like this: +-+-+-+-+--+- |r|e|a|d|\0| +-+-+-+-+--+- +-+-+--+- |-|d|\0| +-+-+--+- +--+--+- |\0|\0| +--+--+- WOW! but... $ printf one$'\x00'two\\n +-+-+-+-+-+-+--+ |p|r|i|n|t|f|\0|

Re: printf "%q" and $'...'

2009-11-25 Thread Andreas Schwab
Antonio Macchi writes: >> $ printf "\x00\n" | cat -A >> ^@ > > it works, so why... > > $ printf $'\x00' | cat -A > $ > > ... not? The answer is in the part you neglected to read. Andreas. -- Andreas Schwab, sch...@linux-m68k.org GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8

Re: printf "%q" and $'...'

2009-11-25 Thread Antonio Macchi
$ printf "\x00\n" | cat -A ^@ it works, so why... $ printf $'\x00' | cat -A $ ... not?

Re: printf "%q" and $'...'

2009-11-25 Thread Greg Wooledge
On Wed, Nov 25, 2009 at 02:35:51PM +0100, Antonio Macchi wrote: > it sounds strange, beacuse > > $ find . -print0 | while read -d $'\x00'; do touch "$REPLY"; done > > works fine. > > > but if I try to "output" $'\x00', I can't. There's a lot going on here, so I'll try to cover it as best I can

Re: printf "%q" and $'...'

2009-11-25 Thread Lhunath (Maarten Billemont)
On 25 Nov 2009, at 14:58, Antonio Macchi wrote: > my goal is very very stupid, like this > > $ printf "%q" $( > to get a "ascii form" of a binary file (something like uuencode) > > > but, as you can see, it does not work only for two binary chars > > 0x00, and 0x0a That doesn't sound like a

Re: printf "%q" and $'...'

2009-11-25 Thread Andreas Schwab
Antonio Macchi writes: > but, as you can see, it does not work only for two binary chars The argument space is not suitable for binary I/O. Andreas. -- Andreas Schwab, sch...@linux-m68k.org GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something complet

Re: printf "%q" and $'...'

2009-11-25 Thread Andreas Schwab
Antonio Macchi writes: > it sounds strange, beacuse > > $ find . -print0 | while read -d $'\x00'; do touch "$REPLY"; done > > works fine. Your "read -d $'\x00'" is exactly equivalent to "read -d ''". (You should use read -r -d '' to get really unmangled input.) > but if I try to "output" $'\x00

Re: printf "%q" and $'...'

2009-11-25 Thread Maarten Billemont
You can "output" $'\x00' just fine: $ printf '\0' Note that -d $'\x00' is the same thing as -d '', for the reason I mentioned earlier. The argument to the -d option that "read" takes is a C-string. Understand the difference between *strings* and *streams*. A stream (standard output of print

Re: printf "%q" and $'...'

2009-11-25 Thread Antonio Macchi
(Note blank line in the output -- one newline from the echo command, and one from the actual content of $myvar.) Using printf -v instead of x=$(printf) means you don't suffer from the trailing-newline-removal that command substitution does. I'm a bit puzzled by the original e-mail, though. I do

Re: printf "%q" and $'...'

2009-11-25 Thread Greg Wooledge
> On 25 Nov 2009, at 08:19, Antonio Macchi wrote: > > Hi, I'm using older bash 3.2.39, so please forgiveme if in your newer bash > > this issue does not arise. On Wed, Nov 25, 2009 at 08:25:00AM +0100, Maarten Billemont wrote: > As for NUL out outputting anything in your result, the cause is C-st

Re: printf "%q" and $'...'

2009-11-25 Thread Antonio Macchi
it sounds strange, beacuse $ find . -print0 | while read -d $'\x00'; do touch "$REPLY"; done works fine. but if I try to "output" $'\x00', I can't.

Re: printf "%q" and $'...'

2009-11-24 Thread Maarten Billemont
As for NUL out outputting anything in your result, the cause is C-strings. Arguments are C-strings and those are delimited by NUL bytes. Therefore, the NUL byte that you're putting in it is actually marking the end of the string. So the argument ends BEFORE your NUL byte. So it's empty. As

printf "%q" and $'...'

2009-11-24 Thread Antonio Macchi
Hi, I'm using older bash 3.2.39, so please forgiveme if in your newer bash this issue does not arise. 0x00 and 0x0a has no output in printf "%q" $ for i in {0..9} a; do printf "%q\n" "`echo -en \"\x0$i\"`"; done '' $'\001' $'\002' $'\003' $'\004' $'\005' $'\006' $'\a' $'\b' $'\t' '' -