问题是“参数太多”

问题是“参数太多”

首先,我将在下面留下我写的代码,但我想告诉你我之前遇到的一个问题。

问题 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 Stack Exchange!

第一个问题

对于你的第一个问题,问题是 bash 无法确定[和之间是否有空格=。 Bash 将任何命令调用(请注意,这只是[另一个命令)评估为一组由任意数量的空格包围的参数,例如,[ a = A ]评估为参数[a=和的列表。 bash 计算并获取字符串后,它会计算命令,就像将该字符串写入命令一样,例如,它将读取, where is a (space) as 。由于没有任何东西可以将变成的空间与任何其他空间区分开来,因此它会被忽略。与直觉相反,您可以用双引号 ( ) 括起来,告诉 bash 将其内容视为参数,即使该参数是一组空格。因此,解决方案是用双引号括起来,这意味着 bash 会将其读取为参数、、、和的列表,这意味着该命令将正确识别左操作数是空格。A]${str:$i:1}[ $x = "a" ]x[ = "a" ]$x$x"$x"${str:$1:1}[="a"][

有趣的是,[这里可能会发出错误的错误,它应该发出unary operator expected.

有关双引号如何工作的更多信息,请查看这个问题

第二个问题

对于第二个问题,处理此类问题的最佳方法可能是在 for 循环之前为每一行预期输出创建一个变量。然后echo,对于 ASCII 字符的每一行,您可以连接到相应的行变量,而不是使用字符的 ASCII art,例如line1="$line1 * * * * *".然后,在循环之后,您可以在每一行上使用 printf,例如printf '%s' "$line1".

请注意,将来您不应在一篇帖子中提出两个问题,而应为每个问题创建两个不同的帖子。

相关内容