使用类似shell的命令,如“printf'*%。0s'$(seq 1 67)”

时间:2014-01-10 20:30:33

标签: ruby bash printf

我在Bash Scripts中使用代码来编写输出结构:

    box_full() {
        printf '*%.0s' $(seq 1 67)
        echo ""
    }
    box_content() {
    echo -n "*"
    if [ $# -eq 0 ]
    then
        printf ' %.0s' $(seq 1 65)
    elif [ $# -eq 1 ]
    then
        RIGHT="$1"
        printf ' %.0s' $(seq 1 17)
        echo -n "${RIGHT}"
        printf ' %.0s' $(seq 1 $[48-${#RIGHT}])
    elif [ $# -eq 2 ]
    then
        LEFT="$1"
        RIGHT="$2"
        printf ' %.0s' $(seq 1 3)
        echo -n "${LEFT}"
        printf ' %.0s' $(seq 1 $[14-${#LEFT}])
        echo -n "${RIGHT}"
        printf ' %.0s' $(seq 1 $[48-${#RIGHT}])
    fi
    echo "*"
}`

用法是:

box_full
box_content "Download-Process..."
box_full`

有没有办法在Ruby Scripts中执行此操作?

编辑:我解决的第一个:

module Style
  def self.box_full
    puts '*' * 67
  end

  def self.box_content(content)
    box_rest = 66 - content.length
    box_rest.to_i
    print '* ' + box_rest * '' + '*'
  end
end

所以箱子全部运作良好。

对于第二个,我想给方法框内容一个名为content的字符串。实际上它不起作用。希望的输出是:

* content *

最后一个*应该设置在第67位的行尾。 是否有可能在Ruby中解决这个问题?

1 个答案:

答案 0 :(得分:0)

你可以通过在ruby脚本中进行系统调用来实现这一点:

system("printf '*%.0s' $(seq 1 67)")

如果您需要引用变量,例如输入参数:

system("echo #{ARGV[0]}")