1

純粋に関数で構成された bash スクリプトがある場合、プロンプトなどを端末に表示するにはどうすればよいですか? たとえば、次のことを考慮してください。

prompt() {
  read -p "This is an example prompt. [Y/n]"
}

main() {
  prompt
}

main "$@"

そのプロンプトメッセージを端末に表示するにはどうすればよいですか? main() から prompt() を呼び出すと、prompt() 関数全体がブラックボックス化されます。prompt() から何かを返す必要がありますか? prompt() で読み取った後に大量のメッセージをエコーし​​たい場合はどうすればよいですか? それらを端末に表示するにはどうすればよいですか?

ここでは基本的なプログラミングの概念が欠けていると思います。

4

5 に答える 5

0

スクリプトをどのように実行していますか? また、main() を呼び出しているのは何ですか?

Bash スクリプトは C プログラムとは異なり、main() 関数を必要としません。Bash は認識したすべての関数を「記憶」しますが、実際にはスクリプトから直接呼び出す必要があります。

これを試して:

# Start of script
prompt() {
  read -p "This is an example prompt. [Y/n]"
}

prompt
# End of script


bash$ chmod +x script_name
bash$ ./script_name
于 2013-08-18T05:39:17.987 に答える
0

prompt() の代わりに prompt と入力します

より良いのは...

function prompt() {
  read -p "$* [Y/n]"
}

それから

prompt "This is an example prompt."
于 2013-08-18T06:14:56.073 に答える
0

あなたの質問に対する私の理解は次のとおりです。
(bash シェル スクリプトの) 関数のセットがあり、それらが呼び出しポイントに値を返すようにします。

C++ での例:

char * prompt() {
    std::cout<<"Some message:";
    std::cin>>value;
    return value;
}

この種の戻り値は、bash (または他の bourne 子孫シェル) スクリプトでは不可能です。関数には終了値しかありません (コマンドと同様)。たとえば、falseコマンドの実装は次のとおりです。

myfalse() { return 1; }

したがってreturn、ゼロまたはゼロ以外の終了ステータスのみを設定します。

関数から値を使用するには、関数は値を標準出力に出力し、その出力をコマンド置換によってキャプチャする必要があります。例えば:

toupper() {
    val="$(echo $1| tr 'a-z' 'A-Z')"
    echo $val
}

ucasestr="$(toupper "Hello, World")"
echo $ucasestr
HELLO, WORLD
于 2013-08-19T02:38:15.940 に答える