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は異なります。