
No.1ベストアンサー
- 回答日時:
bash等のB-sh系シェルでは
変数定義 コマンド ...
とすることで、一時的に「環境変数を定義」して「コマンド」を実行します。
VERSION=2; echo ${VERSION}
は、
VERSION=2
echo ${VERSION
という2つのコマンドを順次実行するものです。
現在実行しているシェルで変数VERSIONに2が設定されます。
VERSION=2 echo ${VERSION}
は、一時的にVERSION=2を設定して、echo ${VERSION}を実行する、という1つのコマンドです。
これを
VERSION=5 echo ${VERSION}
などとしても、現行シェルのVERSIONは元のままです。
ただ、この場合、やはり出力は「2」になります。それは、このコマンドラインの実行の流れとして、まず${VERSION}が展開され「VERSION=5 echo 2」が実行されるからです。
確認するには,echoversion.shとして
echo ${VERSION}
とだけ書いたファイルを用意し、chmod +x echoversion.sh をした上で
VERSION=2; ./echoversion.sh
echo ${VERSION}
VERSION=5 ./echoversion.sh
echo ${VERSION}
を比べればわかると思います
ありがとうございました。解説いただいたおかげできちんと理解できました。
私はプログラムのビルドでこのように書かれたスクリプトを見てずっと気になっていました。ちゃんとした法則があることがわかり、また一歩前進できました。
No.3
- 回答日時:
セミコロンは、命令の区切りなので、
>$ VERSION=2; echo ${VERSION}
は、
$ VERSION=2
$ echo ${VERSION}
と同じです。1つめがシェル変数への値の代入で、2つめがそのシェル変数の値の表示。
>$ VERSION=2 echo ${VERSION}
これは、環境変数へ値を設定した状態で、echo を呼び出します。ただ、echoの呼び出し前に ${VERSION} の部分の展開がなされるので、
$ VERSION=1
$ VERSION=2 echo ${VERSION}
では、1が表示されます。
環境変数の一時的な置き換えができるので、普通はechoのようなbash組み込みコマンドでなくて、外部コマンドの実行環境を変えるときに使います。
たとえば、
$ man ls ⇒ 日本語のドキュメント
$ LANG=en_US man ls ⇒ 英語のドキュメント
$ man ls ⇒ また日本語のドキュメント
>2つ目のコマンドはどのような法則に基づいて、シェル変数の設定部分と、実行するコマンドの部分が切り分けて解釈されたのでしょうか?
コマンドの先頭から、リダイレクト指定を除いて、代入の形式が続く限り、それを環境変数の設定と見なします。
set -k とすると、先頭でなくても代入の形式であれば環境変数の設定になります。
$ man ls LANG=en_US ⇒ ls と LANG=en_US はmanの引数。LANG=en_USというマニュアルはないというエラーメッセージが出る
$ set -k
$ man ls LANG=en_US ⇒ 英語のマニュアル
$ set +k
いつもお世話になっております。丁寧に教えていただきありがとうございます。いつか私もコミュニティに貢献できる日が来ればと考えています。
No.2
- 回答日時:
セミコロンがある文はパイプラインをシーケンシャルに実行
平たく言えば複数のコマンドを数珠つなぎに連続して処理すること
スペース区切りの文は文字列を引数として渡してコマンドechoを呼び出しています
関連項目
bashスクリプトのセミコロンは,改行と同義なんでしょうか. 手.. - 人力検索はてな http://q.hatena.ne.jp/1209009497
Man page of BASH
http://linuxjm.sourceforge.jp/html/GNU_bash/man1 …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux linuxサーバーのキャッシュをクリアするコマンドを実行したい。 5 2023/01/24 14:52
- PHP PHP MySql ページング 2 2022/09/20 06:38
- その他(プログラミング・Web制作) ログインシェル時のSHELL環境変数 1 2022/06/08 19:21
- UNIX・Linux Linuxのbash環境下です。 1 2022/11/27 12:31
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- その他(プログラミング・Web制作) 単純なコマンドプロンプトが動きません。 2 2022/04/19 15:21
- UNIX・Linux bashの変数でブランクがあるかチェックする方法教えて下さい。 3 2023/04/06 16:09
- UNIX・Linux 次の要件を満たすにはどのように修正したらよろしいでしょうか 1 2022/11/24 20:57
- UNIX・Linux linuxシェルスクリプト(baシェル)でファイルにかかれた数式を評価し計算する方法を教えてください 1 2022/08/26 14:28
- PHP アップロードファイルの数に応じてCSSを動的に変更したいのですが、方法がわかりません 3 2023/07/23 21:59
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UNIX コマンドにおける # や円...
-
AIXでの文字コード、改行コード...
-
コマンドプロンプトにおけるコ...
-
[バッチファイル]レジストリ値...
-
vbaで「最前面に」とする方法は?
-
Linuxでコマンドが終了しない
-
Windows98のパーティションを教...
-
MS-DOSで使えるコマンド一覧を...
-
windows10を使っています。 wsl...
-
SCコマンドでアクセス拒否
-
「環境変数名の編集」ウィンド...
-
Linuxコマンドは何の言語で書か...
-
OSを知るには
-
DIGA DMR-BZT710はSSDに出来ません
-
JP1での保留Job一覧取得につき...
-
Soralis8で、setenvが無いので...
-
WindowsNT/2000のATコマンド
-
FTPコマンドについて
-
フォルダ-を合併するには?
-
HP-UXでのmtコマンドについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UNIX コマンドにおける # や円...
-
Excel下部のメニューが消えた
-
至急です、Ubuntuに詳しい方助...
-
「環境変数名の編集」ウィンド...
-
SCコマンドでアクセス拒否
-
shutdownコマンドをキャンセル...
-
コマンドプロンプトにおけるコ...
-
ワイルドカードを使ってでフォ...
-
Linuxコマンドは何の言語で書か...
-
[バッチファイル]レジストリ値...
-
アクセスのボタンから指定のワ...
-
echo $!の意味を教えてください
-
AIXでの文字コード、改行コード...
-
DOSコマンドについて
-
Linuxでコマンドが終了しない
-
compressコマンドってなくなっ...
-
JP1での保留Job一覧取得につき...
-
Linux:sedコマンドで置換がし...
-
コマンド履歴が~/.bash_history...
-
vbaで「最前面に」とする方法は?
おすすめ情報