web-dev-qa-db-ja.com

var = "$(date +"%x%r%Z ")"に対応する日付コマンドラインは何ですか

Ubuntuで次のコマンドラインを実行した場合:

_var="$(date +"%x %r %Z")"
echo var
_

目的の出力を得ることができます。しかし、私が走ったら

_date +%x %r %Z
_

エラーが表示されます:

日付:余分なオペランド '%r'

詳細については、「date --help」を試してください。

var="$(date +"%x %r %Z")"に対応する日付コマンドは何ですか?ありがとう。

1
user5280911

まったく同じコマンドをコピーしませんでした。 date +"%x %r %Z"を括弧内に記述しました。これは外でうまく機能します。それ以外の場合、dateには、1つ(+%x)ではなく、3つの引数(%r%Zおよび+%x %r %Z)があります。

man bashから:

$(command)形式を使用する場合、括弧で囲まれたすべての文字がコマンドを構成します。特別に扱われるものはありません。
コマンド置換はネストできます。

コンテンツを評価する前に括弧が一致するため、コマンドは$(date +%x%r%Z)として分割されません。

注意 :
$echo $varを忘れました。

4
user285259

それでは、var = "$(date +"%x%r%Z ")"に対応するdateコマンドは何ですか?

別の回答で既に述べたように、正しいオプションを引用するのを逃した場合は、少なくとも次のようにする必要があります。

date +"%x %r %Z"

空白を使用してさまざまな情報を区別するため、これが必要です。日付の manページ は、-または_の使用を提案します。 、これを使用すると、通常の端末で引用符をすべて省略したり、空白をエスケープしたりできます。


例:

  • 区切り文字として「-」を使用

    date +%x-%r%Z
    

    次の出力が得られます。

    21.09.2018-11:30:15 CEST
    
  • 区切り文字として「_」を使用

    date +%x_%r%Z
    

    次の出力が得られます。

    21.09.2018_11:30:15 CEST
    
  • 区切り文字としてエスケープされた空白を使用する

    date +%x\ %r%Z
    

    次の出力が得られます。

    21.09.2018 11:30:15 CEST
    
  • 仕切りをまったく使用しない

    date +%x%r%Z
    

    次の出力が得られます。

    21.09.201811:30:15 CEST
    

特別なユースケースの残り。日付をcrontabコマンドに組み込む場合、%記号もエスケープする必要があります。したがって、分割されていない情報として、コマンドは次のようになります(前述の規則はまだエスケープに適用されます)。

date +\%x\%r\%Z
1
Videonauth