0

bash スクリプトに PID の配列があります。これらを \| で結合したい grep を使用して、配列内のいずれかの PID に一致するものを検索できるようにセパレーターとして。基本的に、以下に示すように IFS を変更しようとしていますが、発生する問題は、目的の出力ではなく、

GREP_ARG='29126\|27435'

私は得る

GREP_ARG='29126\27435'. 

これは私が使用しているコードです

function join {
    local IFS="$1"; shift; echo "$*";
}

GREP_ARG=$(join '\|' "${PID_ARRAY[@]}")

grep -A1 $GREP_ARG file

さまざまな方法で入力を変更しようとしましたが、何も機能しません。これに対するIFSのアプローチは不可能ですか?

4

3 に答える 3

2

できるよ

GREP_ARG=$(printf "\|%s" "${PID_ARRAY[@]}")
GREP_ARG=${GREP_ARG:2}
于 2014-07-09T10:15:48.647 に答える
0
function join {
    echo -n "$2"
    [[ $# -gt 2 ]] && printf "$1%s" "${@:3}"
}

サブシェルを必要としない別のバージョン:

function join {
    VAR=$1 SEP=$2
    local __A=$3 __B
    printf -v __B "${SEP}%s" "${@:4}"
    printf -v "$VAR" '%s' "$__A$__B"
}

join GREP_ARG '\|' "${PID_ARRAY[@]}"

evalそれらのGREP_ARGであなたがすることがわかりました。でこれらの引数を安全に実行する方法を本当に知っていない限りeval、より良い方法は再帰的なパイプ関数を使用することですが、それはトピックとは別のコンテキストです。ただし、同様のトピックを参照できます。

于 2014-07-09T10:46:32.800 に答える