2016-04-27 14 views
2
#!/bin/bash 

a=ača 

echo ${#a}         #returns 3 
echo $a | xargs -rL1 sh -c 'echo ${#0}'; #returns 4 

Im ersten Echo gibt es mir die richtige Länge der Zeichenfolge. Was soll ich tun, um die richtige Saitenlänge im zweiten Echo zurückzugeben? (Ich möchte Länge 3 in beiden Fällen)So geben Sie die Länge der Zeichenfolge in Xargs (Sonderzeichen) zurück

In meinem Programm habe ich viele Zeilen, die ich bearbeiten muss, deshalb verwende ich xargs.

+0

Ich bekomme 3 für beide. Auf meinem System (Fedora 23) 'bash --version' gibt 'GNU Bash, Version 4.3.42 (1) -Release (x86_64-redhat-linux-gnu)' – amdn

+0

Glück Sie, ich benutze Linux Mint –

+2

@amdn Ihr '/ bin/sh' ist richtig mit bash verbunden und nicht mit einer posix strikten, nicht uniconensicheren Shell wie Dash – andlrc

Antwort

3

Das Problem ist nicht xargs. Das Problem ist sh. Wenn Sie die richtige Länge (Unicode) haben möchten, müssen Sie eine Shell verwenden, die Unicode unterstützt. Beachten Sie:

$ echo $a | xargs -rL1 sh -c 'echo ${#0}' 
4 
$ echo $a | xargs -rL1 bash -c 'echo ${#0}' 
3 

auf debian-ähnlichen Systemen, die Standard-Shell, /bin/sh, eigentlich dash ist die Unicode nicht versteht. Wie oben gezeigt, löst das einfache Ersetzen von sh durch bash das Problem.