0

タイトル: スカラー変数内での bash パラメーターの展開

2 つのファイル間の差分を実行する bash スクリプトがあります。diff がある場合は、statement1 と statement2 を出力します。長いので変数に入れますが、echo ステートメントはパラメーターを展開しません。これはbashで実行できますか?

#!/bin/bash
set -x

source="/home/casper"
target="data/scripts"
statement1="There is a change in ${i}, please check the file"
statement2="or cp /home/casper/${i} /data/scripts/$i"

for i in file1 file2l file3 file4 file5  ; do
    sleep 1 ;
    if diff $source/$i $target/$i 2>&1 > /dev/null ; then
        echo " "
    else
        echo "$statement1 "
        echo "$statement2 "
    fi
done
exit 0

スクリプトは機能しているようです-必要なときに差分を見つけます。ただし、これは出力されるものです。

There is a change in , please check the file
or cp /home/casper/ data/scripts/

言ってもらいたい

There is a change in file2, please check the file
or cp /home/casper/file2 /data/scripts/file2
4

2 に答える 2

0

これは、次を使用して実行できますeval

TEMPLATE_MSG="aaa \${VALUE} ccc"
...
VALUE="bbb"
eval echo "${TEMPLATE_MSG}"

しかし、それは悪なのでお勧めしませんeval:-) 他のオプションはパターン置換を使用しています:

TEMPLATE_MSG="aaa @1@ ccc"
...
VALUE="bbb"
echo "${TEMPLATE_MSG/@1@/${VALUE}}"

したがって、メッセージに一意のパターン (例: @1@) を入れてから、メッセージを印刷するときに、それを variable の内容に置き換えます。

于 2014-10-14T23:49:20.023 に答える