【问题标题】:Convert numbers to enumeration of strings in bash将数字转换为bash中的字符串枚举
【发布时间】:2010-04-18 02:57:50
【问题描述】:

使用 bash,我有一个要用来替换 int 的字符串列表。这是一个例子:

day1=星期一 day2=星期二 day3=星期三 day4=星期四 第 5 天=星期五 day6=星期六 day7=星期日

如果我有一个整数 $dow 来表示星期几,我如何打印实际的字符串?我试过这个:

echo ${day`echo $dow`}

但得到“错误替换”的错误。我该如何进行这项工作?注意:我可以将 $day 变量更改为列表或其他内容。

【问题讨论】:

    标签: bash


    【解决方案1】:

    是的,将其作为数组最简单:

    day=([1]=Monday [2]=Tuesday ...)
    echo "${day[dow]}"
    

    【讨论】:

    • 完美!我不知道 [1]=... [2]=... 这太酷了!
    • 您可以设置第一个索引,其余的将跟随:day=([1]=Monday Tuesday Wednesday...)
    【解决方案2】:
    case $dow in
      [1234567]) eval echo '$day'$dow ;;
    esac
    

    我不想因为不安全地使用“eval”而被骂:-)

    这可能有一种更“现代”的方式。

    【讨论】:

      【解决方案3】:

      你可以使用变量间接:

      day_var=day$dow
      echo ${!day_var}
      

      但你应该考虑使用数组:

      days=("Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" "Sunday")
      echo ${days[$[$dow-1]]}
      

      【讨论】:

      • 我喜欢,但我只能选择一个答案。
      • 不推荐使用方括号,就像您将它们用于内部集合一样(在这种情况下是不必要的)。当前用法是$(( ... )),但数组下标将为您计算:${days[dow-1]}
      【解决方案4】:

      1970 年 6 月(你还记得吗?)这个月从星期一开始:

      for d in {1..7}
      do 
           date -d 1970-06-0$d +%A
      done 
      

      【讨论】:

      • t=7; date -d 'first sunday + '$t'day' +%A 可能更容易记住。
      猜你喜欢
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 2019-10-30
      • 2012-08-25
      • 2014-03-18
      • 2015-06-10
      • 1970-01-01
      相关资源
      最近更新 更多