2

2 つの変数があります。1 つはテキスト、もう 1 つはパターンです。そして、一致したパターンの行を除外したいと思います。どうやってやるの?

私のスクリプトは次のようになります

# get ignore files list
IGNORE=`cat ignore.txt`

# get changed files list
CHANGED=`git diff --name-only $LAST_COMMIT HEAD`

# remove files, that should be ignored from change list
for IG in $IGNORE; do
    echo $CHANGED
    $CHANGED=`cat $CHANGED | grep -v $IG`
done
4

2 に答える 2

3

パターンファイルをgrepに直接提供できます

# get changed files list and remove files that should be ignored
CHANGED=$(git diff --name-only $LAST_COMMIT HEAD | grep -vf ignore.txt)
echo $CHANGED

$()(バッククォートの代わりに使用することをお勧めします。)


ちなみに、この行:

$CHANGED=`cat $CHANGED | grep -v $IG`

おそらく次のようになります。

CHANGED=`echo $CHANGED | grep -v $IG`

あなたがそれを維持するつもりだった場合。

于 2009-11-21T20:54:47.260 に答える
0
# Disable globbing
set -f
# Collect variables
IGNORE=$(cat ignore.txt)
CHANGED=$(...)

# Apply each pattern in turn
for pattern in $IGNORE
do
    # Reset the current list of candidates
    CANDIDATES=
    for candidate in $CHANGED
    do
        # Apply the pattern
        CANDIDATES="$CANDIDATES ${candidate%$pattern}"
    done
    # Update the CHANGED list
    CHANGED=$CANDIDATES
done
于 2009-11-21T20:58:40.263 に答える