English 中文(简体)
B. 血管中的切除
原标题:Executing for-each in bash
  • 时间:2009-11-08 19:55:11
  •  标签:

我不想写一个Bash单列车,在一份清单中,每个项目需要一个功能。 例如,鉴于名单

foo bar baz
and the program "cowsay", it would produce:
 _____
< foo >
 -----
           ^__^
           (oo)\_______
            (__)       )/
                ||----w |
                ||     ||
 _____
< bar >
 -----
           ^__^
           (oo)\_______
            (__)       )/
                ||----w |
                ||     ||
 _____
< baz >
 -----
           ^__^
           (oo)\_______
            (__)       )/
                ||----w |
                ||     ||

(5月,在中间加上新的案文,确实没有问题)

我知道,我可以用手法这样做:

#!/bin/sh

for w in $@; do
  cowsay $w
done

但我无法想象,这样做还有另一种方法。

EDIT:我想,在我最初的问题中,我很不清楚。 我愿这样做,而不必写一个书:

locate foo | sed s/bar/baz/ | [other-processing] | [insert-magic-here] cowsay

问题在于,我试图避免书写文字,以便我只能把文字添加到我的管道中,而不是想到。

最佳回答

页: 1 如果没有<<>条码>>,while, 或until loop structure,xargs, 是你要求做的唯一事情。

使用<代码>n1 如果你需要Xargs,以履行你对每项投入的指挥权,而不是把许多投入作为单独的理由加以执行。 你的榜样是:

$ locate foo | sed s/bar/baz/ | [other-processing] | xargs -n1 cowsay
问题回答

那么,你想要使用xargs。

$ echo foo bar | xargs -n 1 cowsay
 _____
< foo >
 -----
           ^__^
           (oo)\_______
            (__)       )/
                ||----w |
                ||     ||
 _____
< bar >
 -----
           ^__^
           (oo)\_______
            (__)       )/
                ||----w |
                ||     ||

一行:

for i in foo bar baz; do cowsay $i; done

更清楚的是:

foobar="foo bar baz"

for i in $foobar
do
    cowsay $i
done

正如其他人所说的那样,xargs(1)是你想要的,但并不总是合适。 在大多数情况下,当我失败时,这是我想要履行空壳职能的时候。 Xargs有可起诉的指挥。

你可以把 lo放在你的管道中,而不必把它放在一个手脚上:

$ locate foo | sed s/bar/baz/ | [other-processing] | while read line ; do cowsay "$line" ; done

如果奶牛是壳体,该输油管就会运转,但不会有 x。

您可以写出一项职能,把这一职能变成一条线:

function foreach
{
    func=$1; shift
    for arg in $@; do
        ${func} ${arg}
    done
} 

其后援引:

foreach cosway foo bar baz

如果你不有兴趣使用“for”,那么你在座标上的其他选择是使用“水”或“无水” lo。

你们是否想写一个可以按以下方式执行的双面文字?





相关问题
热门标签