Bash

如何從getopts輸出bash腳本中的管道標準輸出?

  • June 28, 2017

我有以下片段:

#!/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作為輸出。

通過管道輸出到 xargs,將其輸入轉換為參數

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

這將導致:

bash getoptscript.sh -m - this is the test

cat您可以簡單地使用來讀取腳本的標準輸入,而不是將字元串作為命令行參數:

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

引用自:https://unix.stackexchange.com/questions/373908