Re: 問題ID:22156について

この質問の投稿一覧へ

なし Re: 問題ID:22156について

msg# 1.1
depth:
1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2019-6-18 14:47 | 最終変更
arashi1977  長老 居住地: 広島  投稿数: 1715
引用:
$が文字列でなく、「変数DATE」と認識されていたら
誤解がないように念のため。「$が変数DATEと認識」ではなく「$DATEが変数DATEと認識」です。


引用:
「変数DATE」に格納されている「現在の日時を表すコマンド」が認識され、「現在の日時」が表示されないのでしょうか?
うーんと、「変数DATEに格納されているのは"date"という文字列」であって「現在の日時を表すコマンドそのもの」や「コマンドの実行結果」ではないです。
この"date"をシェルがどう扱うかで動きが変わるんですね。

ご質問の問題では
・「echo "$DATE"」となっているので、シェルは「echo date」と解釈する。この場合実際に実行すると単にechoコマンドに「date」という文字列を渡すので、結果として「date」と出力することになります。
※シェルの動作をわかりやすくするために「set -x」やっときます。
$ set -x

# シェル変数DATEにdateという文字列を格納
$ DATE=date
+ DATE=date

# 設問のコマンド。dateとだけ理解しているので「echo date」と同じこと
$ echo "$DATE"
+ echo date
date

# 普通に「echo date」をやるとこう
$ echo date
+ echo date
date

・kan1111さんの気にする【「現在の日時を表すコマンド」が認識され】るためにはバッククオートなりを使って「コマンドとして解釈」させる必要があります。
$ echo `$DATE`
++ date ←「`$DATE`」を解釈してコマンドとして実行している
+ echo 2019年 $'6�\234\21018�\227�' $'�\201��\233\234�\227�' $'14�\231\20244�\210\20651�\222' JST
2019年 6月18日 火曜日 14時44分51秒 JST

$ echo $($DATE)
++ date ←上と同じこと
+ echo 2019年 $'6�\234\21018�\227�' $'�\201��\233\234�\227�' $'14�\231\20245�\210\20605�\222' JST
2019年 6月18日 火曜日 14時45分05秒 JST

投稿ツリー

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.