web-dev-qa-db-ja.com

「。」に違いはありますかやっぱりbashの「ソース」?

「。」の違いを探していました。 「source」組み込みコマンドといくつかのソース(例: this ディスカッション、およびbashマンページ)は、これらが同じであることを示唆しています。

しかし、環境変数の問題に続いて、テストを実施しました。次を含むファイルtestenv.shを作成しました。

#!/bin/bash
echo $MY_VAR

コマンドプロンプトで、次を実行しました。

> chmod +x testenv.sh
> MY_VAR=12345
> ./testenv.sh

> source testenv.sh
12345
> MY_VAR=12345 ./testenv.sh
12345

[最初のフォームが空の文字列を返したことに注意してください]

したがって、この小さな実験は、is違いがあることを示唆しています。「ソース」コマンドの場合、子環境は親からすべての変数を継承します1つは、「。」そうではありません。

私は何かを見逃していますか、これはbashの文書化されていない/非推奨の機能ですか?

[GNU bash、バージョン4.1.5(1)-release(x86_64-pc-linux-gnu)]

36
ysap

はい、あなたは何かを見逃しています。

「。」を混同していると思います。 ./testenv.shと '。'のように、現在のディレクトリを意味しますつまり、 source (これは組み込みコマンドです)。したがって、「。」の場合source. ./testenv.shになります。理にかなっていますか?

だからこれを試してください:

MY_VAR=12345 
. ./testenv.sh
13
user1477