スクリプトでバックティックを使用する[閉じる]

スクリプトでバックティックを使用する[閉じる]

echo $Dateとの間になぜこのような違いがありますかecho "$(date +%s_%kh%M_le_%a_%d_%b_%Y)"

beginning=$(date +%s)
diff="0"
rest="$1"
tmp="0"
now="0"
Date=`date +%s_%kh%M_le_%a_%d_%b_%Y`

echo -n "$1"
while [ "$diff" -lt "$1" ]
do
    let "now=$(date +%s)"
    let "diff=now-beginning-1"
    let "tmp=$1-diff"
    if [ "$tmp" -lt "$rest" ]
    then
        echo
        echo $Date
        echo "$(date +%s_%kh%M_le_%a_%d_%b_%Y)"
        let "rest=$1-diff"
        echo -n ", $rest"
    fi
done

echo ""

出力から:

concatenatorus@gwenn-ha-du ~ $ countdown.sh 5
5
1425230747_18h25_le_dim._01_mars_2015
1425230749_18h25_le_dim._01_mars_2015
, 4
1425230747_18h25_le_dim._01_mars_2015
1425230750_18h25_le_dim._01_mars_2015
, 3
1425230747_18h25_le_dim._01_mars_2015
1425230751_18h25_le_dim._01_mars_2015
, 2
1425230747_18h25_le_dim._01_mars_2015
1425230752_18h25_le_dim._01_mars_2015
, 1
1425230747_18h25_le_dim._01_mars_2015
1425230753_18h25_le_dim._01_mars_2015
, 0

私は使用する:

echo $BASH
/bin/bash

答え1

違いは、あなたが実行することです

Date=`date +%s_%kh%M_le_%a_%d_%b_%Y`

スクリプトの始めに。その日付/時刻を...という名前のシェル変数に保存してDate実行します。

echo "$(date +%s_%kh%M_le_%a_%d_%b_%Y)"

ループ内...最後のコマンドは、各反復ごとに新しい時間値を照会して印刷し、echo $Date常に同じ値を印刷します!

答え2

スクリプトはDate =にバックティックを使用しています。date +%s_%kh%M_le_%a_%d_%b_%Y

そして、echoステートメントには二重引用符を使用してください。スクリプトでは同じ結果が生成されます。

バックティックは式を評価するためにのみ使用され、二重引用符は式を評価してメッセージを表示するために使用されます。

スクリプトに二重引用符を使用するかバックティックを使用するかは関係ありません。

関連情報