如何从 getopts 在 bash 脚本中输出管道 stdout?

如何从 getopts 在 bash 脚本中输出管道 stdout?

我有以下片段:

#!/bin/bash

OPTIND=1
while getopts ":m:t" params; do
    case "${params}" in

        m)
             bar=$OPTARG ;;
        t)
            foo=$OPTARG ;;

        \?) 
            "Invalid option: -$OPTARG" >&2
            print_usage 
            exit 2
            ;;

        :)
            echo "Option -$OPTARG requires an argument." >&2
            print_usage
            exit 2
            ;;

        esac

done
shift "$(( OPTIND-1 ))"
echo "${foo}"  && echo  "${bar}"

如何通过此脚本使用管道输出标准输出?

例如:

echo "this is the test" | bash getoptscript.sh -m - 

它应该提供 : this is the test作为输出。

答案1

cat您可以简单地使用读取脚本的标准输入,而不是将字符串作为命令行参数:

printf '%s\n' "$foo"
if [ "$bar" = "-" ]; then
    # assume data is on standard input
    cat
else
    print '%s\n' "$bar"
fi

答案2

通过将输出传输到 xargs,将其输入转换为论点

echo "this is the test" | xargs bash getoptscript.sh -m - 

这将导致:

bash getoptscript.sh -m - this is the test

相关内容