我需要区分两种情况:( ...subshell... ) vs $( ...命令替换...)
我已经有了以下函数,它可以区分在命令替换或子 shell 中运行和直接在脚本中运行。
#!/bin/bash
set -e
function setMyPid() {
myPid="$(bash -c 'echo $PPID')"
}
function echoScriptRunWay() {
local myPid
setMyPid
if [[ $myPid == $$ ]]; then
echo "function run directly in the script"
else
echo "function run from subshell or substitution"
fi
}
echoScriptRunWay
echo "$(echoScriptRunWay)"
( echoScriptRunWay; )
示例输出:
function run directly in the script
function run from subshell or substitution
function run from subshell or substitution
期望的输出
但我想更新代码,以便区分命令替换和子shell。我希望它产生输出:
function run directly in the script
function run from substitution
function run from subshell
trap
PS 我需要区分这些情况,因为当在命令替换和子 shell 中运行时,Bash 对内置命令有不同的行为。
PPS 我也关心echoScriptRunWay | cat
命令。但这对我来说是我在这里创建的新问题。