インタラクティブなbashプロセスで得られたスクリプトのエイリアスが拡張されないのはなぜですか?

インタラクティブなbashプロセスで得られたスクリプトのエイリアスが拡張されないのはなぜですか?
$ alias bb=hello

$ cat test.sh 
#! /bin/bash

alias bb
echo "$bb"

$ ./test.sh 
./test.sh: line 3: alias: bb: not found

子bashプロセスが親bashプロセスからスクリプトエイリアスを継承しないためですか?

$ source ./test.sh 
alias bb='hello'

スクリプトの内容はbashプロセスで実行されるため、エイリアスが存在します。ただし、エイリアスは拡張されません。

Bashのマニュアルによると

シェルが非対話型の場合、Shoptを使用してExpand_aliasesシェルオプションを設定しない限り、エイリアスは拡張されません。

しかし、インポートされるスクリプトの内容はインタラクティブなbashプロセスで実行されますが、エイリアスが拡張されないのはなぜですか?

ありがとうございます。

ベストアンサー1

スクリプトを実行すると

./test.sh

その後、現在の対話型シェルではなく、独自の非対話型シェルで実行されます。あなたはする必要があります

. ./test.sh

これは次のとおりです。

source ./test.sh

2番目の例では。

バラよりソース("."または"source")とbashでのファイル実行の違いは何ですか?

の場合、echo "$bb"パラメータ拡張エイリアスを拡張しないでください。:

ニックネーム単純なコマンドの最初の単語として使用すると、単語を文字列に置き換えることができます。

おすすめ記事