レス
元トピ次レス
タイトル
Re: 問題ID:22156について
フォーラム
最強WEB問題集LinuC/LPIC Lv1 101
投稿ユーザ(投稿日)
(2019/6/18)
本文

-----引用(始)-----

$が文字列でなく、「変数DATE」と認識されていたら

-----引用(終)-----

誤解がないように念のため。「$が変数DATEと認識」ではなく「$DATEが変数DATEと認識」です。



-----引用(始)-----

「変数DATE」に格納されている「現在の日時を表すコマンド」が認識され、「現在の日時」が表示されないのでしょうか?

-----引用(終)-----

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

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

・kan1111さんの気にする【「現在の日時を表すコマンド」が認識され】るためにはバッククオートなりを使って「コマンドとして解釈」させる必要があります。
[code]
$ 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
[/code]

レス一覧

元トピ次レス


Ping-tモバイルTOP

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