Сравнение двух переменных в оболочке - PullRequest
1 голос
/ 14 апреля 2011

у меня есть две переменные $ a и $ b

и

$a=Source/dir1/dir11
$b=Destination/dir1/dir11

$ a и $ b изменяются, но инициалы Source / и Destination / остаются прежними. Я хочу сравнить $ a и $ b без источника / и пункта назначения /

как мне это сделать? Следующий код, который я использую

   SOURCE_DIR_LIST=`find Source/ -type d`
   DEST_DIR_LIST=`find Destination/ -type d`

for dir_s in $SOURCE_DIR_LIST
do
    for dir_d in $DEST_DIR_LIST
    do

        if [ ${dir_s/Source\//''} == ${dir_d/Destination\//''} ]
        then
                echo " path match = ${dir_s/Source\//''}"

        else
             echo "path does not match source path = ${dir_s/Source\//''} "
             echo " and destination path= ${dir_d/Destination\//''} "
        fi
    done
done

Но вывод будет следующим:

 path match = ''
./compare.sh: line 9: [: ==: unary operator expected
path does not match source path = ''
 and destination path= ''dir2
./compare.sh: line 9: [: ==: unary operator expected
more

Ответы [ 4 ]

4 голосов
/ 14 апреля 2011
if [ ${a/Source/''} == ${b/Destination/''} ]
then
  # do your job
fi
1 голос
/ 14 апреля 2011

с использованием case/esac

case "${a#*/}" in
 ${b#*/} ) echo "ok";;
esac
1 голос
/ 14 апреля 2011
if [ `echo $a | sed 's/Source\///'` == `echo $b | sed 's/Destination\///'` ]
then
    # Do something
fi
0 голосов
/ 14 апреля 2011

или с awk

 #!/bin/bash
    a="Source/dir1/dir11"
    b="Destination/dir1/dir11"
    SAVEIFS=$IFS
    IFS="\/"
    basea=$(echo $a | awk '{print $1}')
    baseb=$(echo $b | awk '{print $1}') 
    if [ $basea == $baseb ]; then
        echo "Equal strings"
    fi
    IFS=$SAVEIFS
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...