bashrcファイルのソース関数にパイプする方法は?

bashrcファイルのソース関数にパイプする方法は?

私たちは皆、シェルスクリプトとインストールされたプログラム(grep、awkなど)にパイプする方法を知っています。しかし、.bashrcまたは.zshrcのソース機能はどうですか?

テスト機能は次のとおりです。

function fff(){
    echo "$@"
}

以下はテストコマンドです。

$ echo "hello world" | fff

それは動作しません

ベストアンサー1

関数には、標準入力ストリーム(パイピング時に取得)のデータではなく、コマンドライン引数が必要です。

あなたができることは、関数にコマンドライン引数が与えられているかどうかをテストし、そうでない場合は標準入力ストリームに出力することです。

fff () {
    if [ "$#" -gt 0 ]; then
       echo "$@"
    else
       cat
    fi
}

テスト:

$ echo "hi there" | fff
hi there

別の解決策は、元の関数定義を次のコマンドに置き換えることです。

fff "$( echo "hi there" )"

これは$@関数内の単一の文字列に設定されますhi there。パイプされたデータが単一の文字列または短いテキスト行の場合、これは完全に有効なソリューションです。大量のデータを処理するには、上記のテストで示されているように、上記の関数定義の呼び出しを通常の行でアプローチ(使用可能awk)に置き換え、パイプからデータを読み取ることを検討してください。cat

おすすめ記事