grepステートメントで$ BASHPIDを使用する

grepステートメントで$ BASHPIDを使用する

pgrepが返した結果からサブシェルのPIDを除外しようとしています。ファイル名はpgrepに渡された名前と同じです。 BASHPIDと同じ変数を設定すると、「grep -v」が以下で機能することを許可するのはなぜですか?私はBash 4.1.2を使用しています。

myprocess.sh

#!/bin/bash

# === Fails ===
pids=$(pgrep -f myprocess | grep -v ${BASHPID} | grep -v $$)
echo "$pids"

echo "-------"

# === Works ===
pids=$(bashpid=${BASHPID}; pgrep -f myprocess | grep -v ${bashpid} | grep -v $$)
echo "$pids"

ベストアンサー1

パイプの右側にあるコマンドはサブシェルで実行されるため、$ BASHPIDは異なります。

おすすめ記事