プログラムや関数の出力を変数にパイプする方法は?
たとえば、次のスクリプトがあるとします。
function foobarize () {
sed \
-e "s|${foo}|${bar}|g" \
$1
}
echo foo | foobarize | set THIS_VARIABLE
明らかに設定された値は機能しませんTHIS_VARIABLE
。
しかし、これを行うと:
THIS_VARIABLE=$(echo foo | foobarize)
...末尾の改行文字を削除するため、この方法も機能しません。
それでは、バックティックや$()を使わずにfoobarize
intoの出力をどのように取得できますか?THIS_VARIABLE
答え1
あなたが言ったようにすることができます:
THIS_VARIABLE=$(echo foo| foobarize; printf .)
THIS_VARIABLE=${THIS_VARIABLE%.}
末尾の改行は削除されません。 THIS_VARIABLEを保存する目的に関する追加情報がある場合は、追加のお手伝いをいたします。
いくつかの例:
$ v=$(printf '0123456789' | sed -n p; printf .)
$ printf %s "${v%?}" | wc
0 1 10
$ v=$(printf '\n\n\n\n\n\n\n\n' | sed -n p; printf .)
$ printf %s "${v%?}" | wc
8 0 8
願いより?