【问题标题】:What am i doing wrong here? in bash random我在这里做错了什么?在bash随机
【发布时间】:2014-11-13 19:21:45
【问题描述】:

我正在尝试制作随机颜色输出字符串 我的文件名是 abc,我输入的命令是 abc RANDOM love_bash

color=(0;30 0;31 0;32 0;33 0;34 0;35 0;36 0;37)
color2=${#color[*]}

input='^random$'
shopt -s nocasematch

if [[ $1 =~ $input ]]; then
        echo -ne '\e['${color[$((RANDOM%color2))]}m
        exit 2
fi

当我输入命令以获取随机输出时,我得到了

./echoc: line 22: syntax error near unexpected token `;'
./echoc: line 22: `color=(0;30 0;31 0;32 0;33 0;34 0;35 0;36 0;37)'
./echoc: line 42: RANDOM%color2: division by 0 (error token is "color2")

【问题讨论】:

  • 数组索引已经在算术上下文中进行了评估;这里不需要$((...))

标签: bash


【解决方案1】:

;bash中的命令终止符;您需要将其作为数组元素的一部分引用。

color=("0;30" "0;31" ... )

【讨论】:

  • 谢谢,不敢相信我没看到
【解决方案2】:

我会怎么做:

tput setaf  $(( ( RANDOM % 7 ) + 1 ))
echo foobar
tput sgr0

【讨论】:

    【解决方案3】:

    我用 '' 围绕 ANSI 颜色代码对其进行了测试,它可以工作:

    color=('0;30' '0;31' '0;32' '0;33' '0;34' '0;35' '0;36' '0;37' '1;30' '1;31' '1;32' '1;33' '1;34' '1;35' '1;36' '1;37')
    
    color2=${#color[*]}
    
    input='^random$'
    shopt -s nocasematch
    
    if [[ $1 =~ $input ]]; then
            echo -ne '\e['${color[RANDOM%color2]}m
            exit 2
    fi
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-03
      • 2013-06-28
      • 2023-01-19
      • 1970-01-01
      • 2020-12-23
      • 1970-01-01
      相关资源
      最近更新 更多