如何 return xargs 中字符串的长度(特殊字符)

How to return length of string in xargs (special characters)

#!/bin/bash

a=ača

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

在第一个 echo 中,它给了我正确长度的字符串。我该怎么办,在第二个回声中 return 正确的字符串长度? (在这两种情况下我都希望长度为 3)

在我的程序中有很多行,我必须编辑,这就是我使用 xargs 的原因。

问题不在于xargs。问题是sh。如果你想要正确的(unicode)长度,你需要使用支持unicode的shell。观察:

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

在类似debian的系统上,默认的shell、/bin/sh实际上是不理解unicode的dash。如上图,简单的把sh换成bash就解决了