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

时间:2016-04-27 22:44:42

标签: linux string bash char xargs

#!/bin/bash

a=ača

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

在第一个回声中,它给了我正确的弦长。我该怎么做,在第二个回声中返回正确的弦长? (我希望在两种情况下长度为3)

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

1 个答案:

答案 0 :(得分:3)

问题不在于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实际上是dash,它不了解unicode。如上所示,只需将sh替换为bash即可解决问题。