Предполагая, что вы хотите удалить все одинаковые символы в двух строках, вы можете сделать это за два вызоваsed
:
#!/bin/sh
player1_word='hello'
player2_word='bxolq'
player1_short=$( printf '%s\n' "$player1_word" | sed "s/[$player2_word]//g" )
player2_short=$( printf '%s\n' "$player2_word" | sed "s/[$player1_word]//g" )
if [ "${#player1_short}" -gt "${#player2_short}" ]; then
printf 'Player1 wins with "%s" ("%s") over "%s" ("%s")\n' \
"$player1_word" "$player1_short" \
"$player2_word" "$player2_short"
elif [ "${#player2_short}" -gt "${#player1_short}" ]; then
printf 'Player2 wins with "%s" ("%s") over "%s" ("%s")\n' \
"$player2_word" "$player2_short" \
"$player1_word" "$player1_short"
else
printf 'It is a draw between "%s" ("%s") and "%s" ("%s")\n' \
"$player1_word" "$player1_short" \
"$player2_word" "$player2_short"
fi
Основной операционной частью этого скрипта является
player1_short=$( printf '%s\n' "$player1_word" | sed "s/[$player2_word]//g" )
player2_short=$( printf '%s\n' "$player2_word" | sed "s/[$player1_word]//g" )
, который устанавливает две переменные _short
в значение каждой переменной _word
с удалением букв из другой переменной _word
. Это делается путем использования одного из слов в выражении([...]
)в квадратных скобках и выполнения глобальной замены другого слова, которая удаляет каждый символ, соответствующий любому символу в выражении [...]
.
Тестирование:
$ sh./script.sh
Player2 wins with "bxolq" ("bxq") over "hello" ("he")
Вы спрашиваете, как создать цикл в bash
оболочке/терминале?
Пример:
for ((i=0; i<1000; i++)); do date --iso=ns; echo $i; time sleep 0.1s; done
И если вам так хочется, вы можете заменить все точки с запятой переводом строки. И с bash
использование командной строки использует тот же синтаксис, что и скрипты, поэтому вы можете просто поместить это в текстовый файл и chmod a+x myfilename
, чтобы превратить его в исполняемый скрипт.