10

我的 .bashrc 中有这个自定义函数:

function ord() {
  printf '%d' "'$1"
}

如何让这个函数与 xargs 一起使用?:

cat anyFile.txt | awk '{split($0,a,""); for (i=1; i<=100; i++) print a[i]}' | xargs -i ord {}
xargs: ord: No such file or directory
4

2 回答 2

8

首先,您的函数仅使用 1 个参数,因此在此处使用 xargs 只会采用第一个 arg。您需要将功能更改为以下内容:

ord() {
   printf '%d' "$@"
}

要让 xargs 使用 bashrc 中的函数,您必须生成一个新的交互式 shell。像这样的东西可能会起作用:

awk '{split($0,a,""); for (i=1; i<=100; i++) print a[i]}' anyFile.txt | xargs bash -i -c 'ord $@' _

由于您已经依赖于分词,您可以将 awk 的输出存储在一个数组中。

arr=(awk '{split($0,a,""); for (i=1; i<=100; i++) print a[i]}' anyFile.txt)
ord "${arr[@]}"

或者,您可以使用 awk 的 printf:

awk '{split($0,a,""); for (i=1; i<=100; i++) printf("%d",a[i])}' anyFile.txt
于 2012-06-27T19:05:29.923 回答
0

在简单的情况下,您可以使用/usr/bin/printf

xargs -I {} /usr/bin/printf '%d' "'{}"
于 2012-06-27T22:05:28.327 回答