/ / Come restituire la lunghezza della stringa in xargs (caratteri speciali) - linux, string, bash, char, xargs

Come restituire la lunghezza della stringa in xargs (caratteri speciali) - linux, string, bash, char, xargs

#!/bin/bash

a=ača

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

In prima eco mi dà la giusta lunghezza di stringa. Cosa devo fare per restituire la giusta lunghezza della stringa in secondo echo? (Voglio la lunghezza 3 in entrambi i casi)

Nel mio programma ho un sacco di righe, che devo modificare, ecco perché uso xargs.

risposte:

3 per risposta № 1

Il problema non lo è xargs. Il problema è sh. Se si desidera la lunghezza corretta (unicode), è necessario utilizzare una shell che supporti l'unicode. Osservare:

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

Sui sistemi debian-like, la shell di default, /bin/sh, è effettivamente dash che non comprende l'unicode. Come mostrato sopra, semplicemente sostituendo sh con bash risolve il problema