#!/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 № 1Il 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