バッシュ:date コマンドを「分割」するにはどうすればよいでしょうか?
-
21-09-2019 - |
質問
Cygwin ユーザーはこちら (ただし、適切なソリューションがあれば、私も使用している K/Ubuntu に引き継ぐつもりです)。
.bashrc に次のようなウェルカム メッセージがあります。
SAD=(`date +%A-%B-%d-%Y`)
DUB=(`date -u +%k:%M`)
printf "Today's Date is: ${SAD}.\n"
printf "Dublin time is now ${DUB}. (24-Hour Clock)\n"
上記の変数 SAD で空白を使用しようと何度も試みた結果、諦めてハイフンを使用しました。しかし、当然のことですが、私はこの絆創膏の解決策に満足していません。問題は、私が思い出したように、引用符で囲まれたスペース、\s、または同様のエスケープタグと、GNU マンページの適切なセクションにリストされている変数を使用しようとするたびに、 日付, の場合、年の変数は無視されるか、エラーが返されました。私がやりたくないのは、によって返された完全な文字列に頼ることです。 日付, 、むしろ、上記のコード内の順序を維持するためです。
これを書いているときに、ウェルカム メッセージのこのコードの周囲に IFS を設定すると、後でデフォルトに戻せば機能するかもしれないと思いつきました (上記は 68 行の .bashrc の 13 ~ 17 行目に表示されます)。しかし、その方法を思い出せませんし、うまくいくかどうかもわかりません。
一般的に、.bashrc ファイルは有効な BASH 構文ですよね。私のものは確かに、私が自分で書いたスクリプト、または他のソースからテストしたスクリプトに似ています。私に足りないのは、このメッセージ ブロックの周囲のフィールド区切り文字を設定および設定解除するためのコードだけだと思います。
解決策を思いついた人は、私だけでなく、シェル スクリプトの世界で最初 (または 13 から 17 番目) のステップを踏み出すネット上の他の比較的初心者にも恩恵をもたらすことは間違いありません。
BZT
解決
置きます
SAD=$(date "+%A %B %d %Y")
DUB=$(date -u +%k:%M)
echo "Today's Date is: ${SAD}."
echo "Dublin time is now ${DUB}. (24-Hour Clock)"
で私の.bash_profile
版画
Today's Date is: Thursday February 18 2010.
Dublin time is now 12:55. (24-Hour Clock)
私はそれはあなたが望むものだと思います。
他のヒント
問題は、あなたの配列の宣言である。
SAD=(date +%A-%B-%d-%Y)
は単に "+%A-%B-%のd-%Y" 1.自分のために参照要素として、
$ SAD=(date +%A-%B-%d-%Y) #<-- this is an array declaration
$ echo ${SAD[0]}
date
$ echo ${SAD[1]}
+%A-%B-%d-%Y
あなたが「日付」コマンドの値が変数、使用$(..)
になりたい場合は、例えば、
$ SAD=$(date +%A-%B-%d-%Y)
$ echo ${SAD}
Thursday-February-18-2010
スペースを取得するには、あなたはそれが単一の文字列だようdate
の引数を引用符で囲む必要があります。あなたが本当にそれらを評価した行うには何を意味するのかときにも誤って、配列としてSAD
とDUB
を宣言しています。これを試してください:
[/tmp]> $(date "+%A %B %d, %Y")
Thursday February 18, 2010
date +%A\ %B\ %d\ %Y
うまくいく組み合わせを見つけました:
SAD=$(date "+%A %B %d %Y")
echo $SAD
2010 年 2 月 18 日木曜日
さらに別の例としては、次のような場合があります。
- 質問するとお金がかかる
- 二重引用符をどこに置くかを知るのに役立ちます。
日付 明らかに引用符付きスペースからはわかりませんが、Bash は知っています。
それは「右耳でささやく」ということです。
Ghostdog74さん、ありがとうございます。
BZT