如何 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
就解决了
#!/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
就解决了