У меня есть присвоение домашней работы, где я должен взять вход из файла и непрерывно удалять первое слово в строке и добавлять его в конец строки, пока все комбинации не были сделаны.
Я действительно не знаю, где начать и был бы благодарен за любой вид направления.
Часть, которая имеет меня перепутанный, - то, что это, предполагают, чтобы быть выполненным без использования массивов. Я только ищу кого-то для решения проблемы для меня, я просто ищу некоторое направление.
SAMPlE ВВОДЯТ:
Pipes and Filters
Java Swing
Software Requirements Analysis
ДЕМОНСТРАЦИОННЫЙ ВЫВОД:
Analysis Software Requirements
Filters Pipes and
Java Swing
Pipes and Filters
Requirements Analysis Software
Software Requirements Analysis
Swing Java
Несколько лакомых кусочков, которые должны помочь: когда вы вызываете функцию со строкой, строка разбивается на несколько аргументов ( позиционные параметры , названные $ n
, где n - целые числа, начинающиеся с 1) в символах в переменной $ IFS
(по умолчанию используются пробелы, символы табуляции и новые строки)
function first() {
echo $1
}
first one two three
# outputs: "one"
$ *
и $ @
предоставит вам все позиционные параметры по порядку.
Во-вторых, специальная переменная $ #
содержит количество аргументов функции.
В-третьих, shift
отбрасывает первый позиционный параметр и перемещает все остальные на единицу вверх.
function tail() {
shift
echo $*
}
В-четвертых, вы можете записывать вывод команд и функций, используя `...` или $ (...)
rest=`tail $*`
В-пятых, вы можете отправить вывод одной команды на вход другой, использующий вертикальную черту ( |
):
seq 5 | sort
это короткая демонстрация. Просмотрите слова, найдите последнее слово и поставьте перед строкой. пока последняя строка не станет такой же, как оригинал.
#!/bin/bash
s="Software Requirements Analysis"
org="$s"
while true
do
last=${s##* } #Analysis
front=${s% *} #Software Requirements
s="$last $front"
echo $s
case "$s" in
"$org") break;;
esac
done
вы сможете сделать все остальное с помощью файла.
Расширение параметра позволит вам вырезать части переменной.
Для начала ознакомьтесь со встроенной функцией read
:
while read first_word rest_of_the_line; do
... your code here ...
done
Вам также понадобится способ передать свой входной файл в этот петля.