제목 : 스칼라 변수 내에서 bash 매개 변수 확장echo를 통한 스칼라 변수 내에서 bash 매개 변수 확장
두 파일간에 diff를 실행하는 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
스크립트가 작동하는 것처럼 보입니다. 스크립트가 작동 할 때 diff가 발견됩니다. 그러나 이것이 인쇄됩니다.
There is a change in , please check the file
or cp /home/casper/ data/scripts/
가 나는 eval
를 사용
There is a change in file2, please check the file
or cp /home/casper/file2 /data/scripts/file2
'2/& gt;/dev/null'을'>/dev/null 2> & 1'로 바꿉니다. – Cyrus
첫 번째와 두 번째'$ {i}'를'\ $ {i} '로 바꿉니다. – Cyrus
'source'는 명령의 이름이기도합니다. 대신 변수 이름에'src'를 사용하는 것이 좋습니다. 또한 각'statement' 변수를 두 번 이상 액세스하지 않으면 왜 변수를 모두 사용하지 않는 것이 좋을까요? 예 : 'echo "$ {i}에 변화가 있습니다. 작동 할" "파일을 확인하십시오. – vastlysuperiorman