問題は「パラメータが多すぎます」です。

問題は「パラメータが多すぎます」です。

まず、以下に私が作成したコードを残しておきますが、以前に経験した問題について申し上げたいと思います。

問題1:文字を入力してスペースを残した後に文字を再入力すると、「パラメータが多すぎます」というエラーが発生します。この問題をどのように解決できますか? 「たとえば;」何でも書いてください: "ab cd この場所に問題があります。

質問2:「私が書いたテキストに対応する文字を並べて印刷するにはどうすればよいですか?」

私を助けることができる人に感謝します。

write_exs_from_user() {
    read -p "Write Anything: " str
    for (( i = 0; i < ${#str}; ++i ));
    do
        if [ ${str:$i:1} = "a" -o ${str:$i:1} = "A" ]
        then
            echo "
    *
   * *
  * * *
 *     *
*       *
"
        elif [ ${str:$i:1} = "b" -o ${str:$i:1} = "B" ]
        then
            echo "
* * * *
*      *
* * * *
*      *
* * * * 
"
        elif [ ${str:$i:1} = "c" -o ${str:$i:1} = "C" ]
        then
            echo "
* * * * *
*      
* 
*      
* * * * * 
"
        elif [ ${str:$i:1} = "d" -o ${str:$i:1} = "D" ]
        then
            echo "
* * * *
*      *
*       *
*      *
* * * * 
"
        elif [ ${str:$i:1} = "e" -o ${str:$i:1} = "E" ]
        then
            echo "
* * * * *
*      
* * * * *
*      
* * * * * 
"
        elif [ ${str:$i:1} = "f" -o ${str:$i:1} = "F" ]
        then
            echo "
* * * * *
*      
* * * * *
*      
* 
"
        elif [ ${str:$i:1} = "g" -o ${str:$i:1} = "G" ]
        then
            echo "  
 * * * *          
*       *
*
*   * * *
*        *
* * * * *
"
        elif [ ${str:$i:1} = "h" -o ${str:$i:1} = "H" ]
        then
            echo "
*     *
*     *
* * * *
*     *
*     *
"
        elif [ ${str:$i:1} = "i" -o ${str:$i:1} = "I" ]
        then
            echo "
 *
* *
 *

* *
* *
* *
* *
"
        elif [ ${str:$i:1} = "j" -o ${str:$i:1} = "J" ]
        then
            echo "
        *
        *
        *
        *
  *     *
   * * *  
"
        elif [ ${str:$i:1} = "k" -o ${str:$i:1} = "K" ]
        then
            echo "
*     *
*   *
* *
*   *
*     *
"
        elif [ ${str:$i:1} = "l" -o ${str:$i:1} = "L" ]
        then
            echo "
*       
*       
*
*   
*        
* * * * *
"
        elif [ ${str:$i:1} = "m" -o ${str:$i:1} = "M" ]
        then
            echo "
    *     *
   * *   * *
  *   * *   *
 *     *     *
*             *
"
        elif [ ${str:$i:1} = "n" -o ${str:$i:1} = "N" ]
        then
            echo "
    *       *
   * *     * 
  *   *   *   
 *     * *    
*       *      
"
        elif [ ${str:$i:1} = "o" -o ${str:$i:1} = "O" ]
        then
            echo "
   * * *
 *       *
*         *
*         *
*         *
*         *
 *       *
   * * * 
"
        elif [ ${str:$i:1} = "p" -o ${str:$i:1} = "P" ]
        then
            echo "
* * * * *
*        *
* * * * *
*
*
"
        elif [ ${str:$i:1} = "q" -o ${str:$i:1} = "Q" ]
        then
            echo "
   * * *
 *       *
*         *
*         *
*         *
*       * *
 *       *
   * * *  **
"
        elif [ ${str:$i:1} = "r" -o ${str:$i:1} = "R" ]
        then
            echo "
* * * *
*      *
*     *
* ** * 
*     *
*      *
*       *
"  
        elif [ ${str:$i:1} = "s" -o ${str:$i:1} = "S" ]
        then
            echo "
 * * * * 
*       *
*
* * * *
       *
*      *
 * * * 
"
        elif [ ${str:$i:1} = "t" -o ${str:$i:1} = "T" ]
        then
            echo "
* * * * *
    *
    *
    *
    *
"
        elif [ ${str:$i:1} = "u" -o ${str:$i:1} = "U" ]
        then
            echo "
*       *
*       *
*       *
*       *
* * * * *
"
        elif [ ${str:$i:1} = "V" -o ${str:$i:1} = "v" ]
        then
            echo "
*       *
 *     *
  *   *
   * *
    *
"
        elif [ ${str:$i:1} = "w" -o ${str:$i:1} = "W" ]
        then
            echo "
*           *
 *         *
  *   *   *
   * * * *
    *   *
"
       elif [ ${str:$i:1} = "x" -o ${str:$i:1} = "X" ]
        then
            echo "
*   *
 * *
  *
 * *
*   *
" 
elif [ ${str:$i:1} = "y" -o ${str:$i:1} = "Y" ]
        then
            echo "
*     *
*     *
* * * *
      *
* * * *
"
        elif [ ${str:$i:1} = "z" -o ${str:$i:1} = "Z" ]
        then
            echo "
* * * * *
       *
      *
     *
    *
   * * * * *
"
        else 
            echo "Please Write String !"
        fi
    done
}

write_exs_from_user

答え1

UnixとLinuxのスタック交換へようこそ!

最初の質問

最初の質問の場合、問題はbashが[間にスペースがあるかどうかを確認できないことです=。 Bashは、すべてのコマンド呼び出し(これは別のコマンドであることに注意[してください)を空白で囲まれた一連の引数(たとえば、引数[ a = A ]リスト[、、、および)として評価します。 bashは文字列を評価し、インポート後に文字列がコマンドに書き込まれたかのようにコマンドを評価します。たとえば、where is a(space)asを読みます。他の空間と区別される空間がないので無視される。直観とは対照的に、引数が空白のセットであっても、 bash にその内容を引数として扱うように二重引用符 ( ) で囲むことができます。したがって、解決策はこれを二重引用符で囲むことです。これは、bashがこれを引数リスト、、、およびとして読むことを意味します。これは、コマンドが左のオペランドが空白であることを正しく認識することを意味します。a=A]${str:$i:1}[ $x = "a" ]x[ = "a" ]$x$x"$x"${str:$1:1}[="a"][

興味深いことに、[ここでは誤ったエラーが発生する可能性があるため、これをエクスポートする必要がありますunary operator expected

二重引用符のしくみの詳細については、以下を確認してください。この問題

2番目の質問

2番目の質問については、おそらくこのタイプの問題を処理する最善の方法は、forループの前に期待される出力の各行の変数を作成することです。その後、echoASCII文字の各行に文字のASCIIアート(たとえば)を使用する代わりに、その行変数に関連付けることができますline1="$line1 * * * * *"。その後、ループ後に各行でprintfを使用できますprintf '%s' "$line1"

今後は、1つの投稿に2つの質問をするのではなく、各質問に対して2つの異なる投稿を作成する必要があることに注意してください。

関連情報