$ 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"
パラメータ拡張エイリアスを拡張しないでください。:
ニックネーム単純なコマンドの最初の単語として使用すると、単語を文字列に置き換えることができます。