Многократное копирование одного и того же файла

Предполагая, что вы хотите удалить все одинаковые символы в двух строках, вы можете сделать это за два вызова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")
1
08.06.2021, 15:41
1 ответ

Вы спрашиваете, как создать цикл в bashоболочке/терминале?

Пример:

for ((i=0; i<1000; i++)); do date --iso=ns; echo $i; time sleep 0.1s; done

И если вам так хочется, вы можете заменить все точки с запятой переводом строки. И с bashиспользование командной строки использует тот же синтаксис, что и скрипты, поэтому вы можете просто поместить это в текстовый файл и chmod a+x myfilename, чтобы превратить его в исполняемый скрипт.

1
05.09.2021, 12:12

Теги

Похожие вопросы