スクリプトはコマンド置換で実行されますか?

スクリプトはコマンド置換で実行されますか?

POSIX準拠のシェルでコマンド置換でスクリプトが実行されたかどうかを確認できますか?

my-outer $(my-inner)  $(my-other-inner)

上記の例では、内部コマンドの代替であることを確認するmy-inner必要があります。my-other-inner

答え1

私が理解したものが正しい場合はそうではありません。

あなたの質問は次のように要約されます。foobar「基本」シェルで実行しますか、それともecho $(foobar)(コマンドの置き換え)?

foobar以下をテストできます。

  • tty(私はttyの下ですか?)
  • $SHLVL(樹皮は何束ありますか?)

必要に応じて、SHLVLユーザー(シェル)がコマンドを実行すると仮定し、変数を保存して比較できます。

メインシェルのようなものがなく、ログインシェル(ttyを含む)、cronから分岐したシェル、デーモン(メール、Apache)がありますが、「メイン」シェルはないので、mainの周りに引用符を付けました。

編集する:

指摘したように、SLVLは使いにくいかもしれません。

archemar@home> cat t2.sh
echo "$SHLVL" $1
archemar@home> . ./t2.sh $SHLVL
3 3
archemar@home> ./t2.sh $SHLVL
4 3
archemar@home> ./t2.sh $(./t2.sh)
4 4
archemar@home>

答え2

zshcmdsubst文字列が存在することを確認してください。zsh_eval_context大量に:

$ echo "$(
  c=cmdsubst
  if (($zsh_eval_context[(Ie)$c])); then
    echo inside cmdsubst
  fi
)"
inside cmdsubst

関連情報