ほとんどのBash変数(BASH_VERSINFO、OLDPWD、HOSTTYPE)が「コマンドが見つかりません」を返すのはなぜですか?

ほとんどのBash変数(BASH_VERSINFO、OLDPWD、HOSTTYPE)が「コマンドが見つかりません」を返すのはなぜですか?

BASH変数のリストがたくさん見つかりました。https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html

説明によると、

これらの変数はBashで設定または使用されますが、他のシェルは通常これを特に処理しません。

最初の変数は、

BASH:現在のBashインスタンスを実行するために使用されるフルパス名。

しかし、BASH端末に入力するとbash: BASH: command not found

echo $0を使用していることを確認できますbash

同様に、コマンドを実行すると、BASH_VERSINFOコマンドの説明に次のように表示されますが、同じ出力が表示されます。

そのメンバーがこのBashインスタンスのバージョン情報を保持する読み取り専用配列変数(配列を参照)。配列メンバーに割り当てられる値は次のとおりです。

BASH_VERSINFO[0] メジャーバージョン番号(リリースバージョン)です。

BASH_VERSINFO[1] マイナーバージョン番号(バージョン)です。

BASH_VERSINFO[2] パッチレベルです。

BASH_VERSINFO[3] ビルドバージョンです。

BASH_VERSINFO[4] リリース状態(例:ベータ1)。

BASH_VERSINFO[5] MACHTYPE の値です。

たとえば、一部の変数は機能しますhostnamepwd

ベストアンサー1

変数を直接入力すると、シェルは入力した内容をコマンドとして解釈し、$ PATH変数で同じ名前の項目を検索します。 $ PATHにBASHとBASH_VERSINFOというエントリがないため、「コマンドが見つかりません」というエラーメッセージが表示されます。一方、見つかったように、これは有効なコマンドですpwdhostname

echo代わりに、変数(通常は両方ともシェルに組み込まれています)を印刷するコマンドを実行し、チェックしたいprintf変数をコマンドの引数として指定する必要があります。コマンド名は通常小文字で構成され、シェル環境変数は通常大文字でのみ構成されます。

上記の変数の値を表示するには、次のようにします。

$ echo "$BASH"
/bin/bash
$ for i in {0..4}; do printf "%d\t%s\n" "$i" "${BASH_VERSINFO[$i]}"; done
0   4
1   4
2   12
3   1
4   release

配列変数を印刷するには、「${ARR_NAME[$index]}」構文を使用します。 Bash 索引付けは 0 から始まります。通常、不要な動作を避けるために、変数(配列を含む)を二重引用符で囲む必要があります(引用符の省略は、以下のように分割グロップ演算子と同じです)。ここ)。

おすすめ記事