Обработка строки Bash (символ в индексе и конкатенация) - PullRequest
3 голосов
/ 08 декабря 2008

Я пытаюсь научиться обрабатывать строки bash. Как создать сценарий bash, эквивалентный этому фрагменту кода Java?

String symbols = "abcdefg12345_";
for (char i : symbols.toCharArray()) {
    for (char j : symbols.toCharArray()) {
        System.out.println(new StringBuffer().append(i).append(j));
    }
}

Вывод приведенного выше фрагмента кода начинается с:

aa
ab
ac
ad
ae
af

И заканчивается на:

_g
_1
_2
_3
_4
_5
__

Моя цель состоит в том, чтобы иметь список разрешенных символов (не обязательно указанных выше) и распечатать все перестановки длины 2. Если это возможно, я хотел бы получить решение, которое опирается исключительно на bash и ничего не требует еще установлено.

Редактировать: Просто небольшой вопрос: есть ли способ сделать это со строкой без пробелов, разделяющих подстроки? Например, LIST = "abcdef12345 _"?

Ответы [ 4 ]

5 голосов
/ 08 декабря 2008

Это так просто, Bash делает это в анализаторе ввода. Код не требуется. Попробуйте:

echo {a,b,c,d,e,f,g,1,2,3,4,5,_}{a,b,c,d,e,f,g,1,2,3,4,5,_}

Возможно, вам понадобится второй проход, чтобы разбить его на строки.

Или, конечно, вы можете использовать пару вложенных циклов, как в вашем примере:

LIST="a b c d e f 1 2 3 4 5 _";
for a in $LIST ; do
    for b in $LIST ; do
        echo $a$b;
    done;
done
0 голосов
/ 08 декабря 2008

Просто некоторые варианты того, как вы можете разделить созданные элементы. Лично мне нравится использовать tr для этой работы. :

echo {a,b,c,d,e,f,g,1,2,3,4,5,_}{a,b,c,d,e,f,g,1,2,3,4,5,_} | tr " " "\n"
0 голосов
/ 08 декабря 2008

Хорошо вписывается в одну строку:

 for i in `echo {a,b,c,d,e,f,g,1,2,3,4,5,_}{a,b,c,d,e,f,g,1,2,3,4,5,_}`; do echo $i; done
0 голосов
/ 08 декабря 2008
for i in a b c d e f g 1 2 3 4 5 _; do
    for j in a b c d e f g 1 2 3 4 5 _; do
        echo $i$j
    done
done

man bash твой друг. Он имеет большие разделы по замене переменных и внутренним командам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...