【问题标题】:/bin/sh: read arguments from pipe separately/bin/sh:分别从管道中读取参数
【发布时间】:2021-10-16 08:47:22
【问题描述】:

我使用dash shell 作为/bin/sh。

以下命令打印:

echo aa bb cc | while read X ; do echo $X ; done
aa bb cc

如何单独读取参数,即打印出来:

echo aa bb cc | while read X ; do echo $X ; done
aa
bb
cc

【问题讨论】:

  • printf "%s\n" aa bb cc | ...(例如,不要使用 echo ...)另外,避免使用 CAPTIAL 变量名——这些通常是为 sh 保留的。

标签: shell sh command-line-arguments


【解决方案1】:

由于read 将一行输入读入指定变量,关键是让每个输入出现在单独的行上。如果您可以控制echo,只需将其替换为printf "%s\n" aa bb cc | ...,例如

printf "%s\n" aa bb cc | while read x ; do echo $x ; done

(注意:避免对变量名使用全部大写字母——这些通常保留给 shell)

如果您无法更改echo,则将sed 或tr 添加到管道中,例如

echo aa bb cc | sed -E 's/[[:blank:]]+/\n/g' | while read x ; do echo $x ; done

或tr:

echo aa bb cc | tr ' ' '\n' | while read x ; do echo $x ; done

使用/输出示例

在所有情况下,您的输出将是,例如

$ echo aa bb cc | tr ' ' '\n' | while read X ; do echo $X ; done
aa
bb
cc

查看一下,如果您还有其他问题,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-20
    • 2021-10-16
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    相关资源
    最近更新 更多