Побитовое исключающее ИЛИ в BASH требует, чтобы оба операнда были числовыми. Поскольку нет встроенного способа получения порядкового (ASCII) значения символа в bash, вам потребуется, скажем, Perl, чтобы получить это значение.
Редактировать : как указано ниже, ord
работает только с первым символом строки.
let a=`perl -e 'print ord $_ for split //, $ARGV[0]' string`^123; echo $a
Конечно, как только вы окажетесь в Perl, вы можете сделать все это там:
let a=`perl -e '$ordinal .= ord $_ for split //, $ARGV[0]; print $ordinal ^ $ARGV[1]' string 123`
Редактировать : получается, что вы можете получить порядковый номер строки в BASH, используя printf
. Просто добавьте строку с префиксом '
.
printf "%d" "'string"
Итак, только в BASH:
let a=$(printf "%d" "'string")^123; echo $a