6

ファイルから入力を取得し、行の最初の単語を継続的に削除して、すべての組み合わせが完了するまで行末に追加する必要がある宿題があります。

私は本当にどこから始めればいいのかわからないので、どんな方向性でもありがたいです.

私が混乱している部分は、これが配列を使用せずに実行されると想定されていることです。問題を解決してくれる人を探しているだけではなく、何らかの方向性を探しているだけです。

サンプル入力:

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
4

7 に答える 7

6

役立ついくつかのヒント: 文字列を使用して関数を呼び出すと、文字列は変数文字(デフォルトではスペース、タブと改行)$n$IFS

function first() {
    echo $1
}
first one two three
# outputs: "one"

$*$@すべての位置パラメータを順番に示します

次に、特殊変数$#は関数の引数の数を保持します。

3 番目にshift、最初の位置パラメータを破棄し、他のすべてのパラメータを 1 つ上に移動します。

function tail() {
    shift
    echo $*
}

第 4 に、コマンドと関数の出力を`...` または$(...)

rest=`tail $*`

第 5 に、パイプ文字( |)を使用して、あるコマンドの出力を別のコマンドの入力に送信できます。

seq 5 | sort
于 2010-04-05T12:34:54.867 に答える
3

read開始するには、ビルトインを確認してください。

while read first_word rest_of_the_line; do
    ... your code here ...
done

入力ファイルをそのループにフィードする方法も必要です。

于 2010-04-05T12:27:35.180 に答える
0

これは短いデモです。単語を調べて、最後の単語を取得し、文字列の前に置きます。最後の文字列が元の文字列と同じになるまで。

    #!/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

ファイルを使用して残りを実行できるはずです。

于 2010-04-05T13:03:39.550 に答える
-1

パラメータ展開により、変数の一部を切り取ることができます。

于 2010-04-05T12:33:27.353 に答える