Оператор == всегда предназначен для сравнения ссылок на объекты, тогда как метод сравнения строк .equals () переопределяется для сравнения содержимого:
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2); // It prints false (reference comparison)
System.out.println(s1.equals(s2)); // It prints true (content comparison)
Вы можете попробовать Perl
$ echo "a1 b2 c3 )@in#( d4 e5 f6 )@out#( g7 h8 i9" | perl -lne ' @a=split(/\s*\)\@in#\(\s*|\s*\)\@out#\(\s*/); print join("\n",@a) '
a1 b2 c3
d4 e5 f6
g7 h8 i9
$ echo "a1 b2 c3 )@in#( d4 e5 f6 g7 h8 i9" | perl -lne ' @a=split(/\s*\)\@in#\(\s*|\s*\)\@out#\(\s*/); print join("\n",@a) '
a1 b2 c3
d4 e5 f6 g7 h8 i9
$
Вы можете прочитать вывод, пройдя через цикл while
$ echo "a1 b2 c3 )@in#( d4 e5 f6 g7 h8 i9" | perl -lne ' @a=split(/\s*\)\@in#\(\s*|\s*\)\@out#\(\s*/); print join("\n",@a) ' | while read x;do; echo "val=$x"; done
val=a1 b2 c3
val=d4 e5 f6 g7 h8 i9
$
или распечатать каждое значение arr в perl и прочитать их по одному один
$ echo "a1 b2 c3 )@in#( d4 e5 f6 g7 h8 i9" | perl -lne ' @a=split(/\s*\)\@in#\(\s*|\s*\)\@out#\(\s*/); print $a[0] ' | read x1
$ echo $x1
a1 b2 c3
$
$ echo "a1 b2 c3 )@in#( d4 e5 f6 g7 h8 i9" | perl -lne ' @a=split(/\s*\)\@in#\(\s*|\s*\)\@out#\(\s*/); print $a[1] ' | read x2
$ echo $x2
d4 e5 f6 g7 h8 i9
$
Мое окончательное решение заключается в следующем:
IFS= - Установите
IFS
в \n
. - Вместо вывода на стандартный вывод я назначаю вывод массиву .
- Обратите внимание на дополнительные скобки снаружи.
Вот две ссылки:
\n' _log_array=( $( awk -F'[[:space:]]*\\)@(in|out)#\\([[:space:]]*' '{ print NF; for (i = 1; i <= NF; ++i) print $i; }' <<< $s ) )
IFS
в \n
. Вот две ссылки: