GNU/Linux >> Linux の 問題 >  >> Linux

Bash - 日付コマンドとスペース

正しいアプローチは、Bash スクリプト内で独自の関数を定義することです。

function my_date {
  date "+%y-%m-%d %H:%M:%S"
}

my_date を使用できるようになりました あたかも外部プログラムであるかのように。

例:

echo "It is now $(my_date)."

または単に:

my_date

あなたのアプローチがうまくいかないのはなぜですか?

最初の問題は、あなたの割り当てが壊れていることです。

DATE_COMMAND="date "+%y-%m-%d %H:%M:%S""

これは、文字列 date +%y-%m-%d の代入として解析されます 変数 DATE_COMMAND に .空白の後、シェルは意図しない方法で残りの記号を解釈し始めます。

これは、見積もりを変更することで部分的に修正できます。

DATE_COMMAND="date '+%y-%m-%d %H:%M:%S'"

ただし、これで問題が解決するわけではありません。

echo $($DATE_COMMAND)

引数が正しく展開されません。 date プログラムには引数 '+%y-%m-%d が表示されます および %H:%M:%S' (引用符付き) 単一の文字列の代わりに。これは eval を使用することで解決できます のように

DATE_COMMAND="date '+%y-%m-%d %H:%M:%S'"
echo $(eval $DATE_COMMAND)

変数 DATE_COMMAND 最初に文字列 date '+%y-%m-%d %H:%M:%S' に展開されます それは eval です あたかもそのように書かれているかのように使用され、 date が呼び出されます

問題を説明するためにこれを示しているだけであることに注意してください。 eval ここでは良い解決策ではありません。代わりに関数を使用してください。

PS すべて大文字の識別子文字列は、環境変数と競合することが多く、シェルにとって魔法のような意味を持つことさえあるため、避けることをお勧めします。


スペースからの脱出はうまくいきます。

echo `date +%d.%m.%Y\ %R.%S.%3N` 

Linux
  1. #の間にスペースは許可されていますか?そして/bin/ bash In Shebang?

  2. Bash の eval コマンドとその典型的な使用法

  3. Bash での日付比較

  1. Bash履歴で実行する各コマンドの日付と時刻を設定する

  2. コマンドライン(bash)の「And」の違い??

  3. ディレクトリと日付を表示する履歴コマンド?

  1. Bashトラップコマンドの説明

  2. bash エクスポート コマンド

  3. bashの&>と>&の違いは何ですか?