On 3/15/25 07:37, Otto Moerbeek wrote:
> On Sat, Mar 15, 2025 at 07:29:39AM +0100, Christian Schulte wrote:
> 
>> Hi @misc,
>>
>> I recently stumbled upon an issue with GNU printf(1). I was using
>> echo(1) in a testsuite.at on OpenBSD successfully, but that failed on
>> linux badly. The OpenBSD man page of echo(1) contains this sentence:
>>
>> Where portability is paramount, use printf(1).
>>
>> So I replaced echo(1) with printf(1). This leads to...
>>
>> OpenBSD:
>>
>> x500$ printf -0
>> -0x500$ printf -something
>> -somethingx500$
>>
>> which is the expected output. On linux I get
>>
>> schulte@vps:~$ printf -0
>> -bash: printf: -0: invalid option
>> printf: usage: printf [-v var] format [arguments]
>> schulte@vps:~$ printf -something
>> -bash: printf: -s: invalid option
>> printf: usage: printf [-v var] format [arguments]
>>
>> Would you rate this a bug in GNU printf(1)?
>>
>> -- 
>> Christian
>>
> 
> No, i would rate as a usage error. Use -- to separate options form the
> rest of the arguments.
> 
> print -- -0
> 
>       -Otto

Thanks. Adding -- everywhere should make it portable. Would you mind
explaining the following to me as well?

For example:

x500$ echo -n \\u0041
\u0041x500$

Expected output.

x500$ printf -- \\u0041
printf: unknown escape sequence `\u'
u0041x500$

x500$ printf -- \\\u0041
printf: unknown escape sequence `\u'
u0041x500$

x500$ printf -- \\\\u0041
\u0041x500$

Why does printf(1) require four backslashes to yield the same output?
The man page just mentions:

\\      Write a backslash character.

I would have expected \\\\ to write two backslash characters. Is this
related to the shell, or to the command?

-- 
Christian

Reply via email to