【问题标题】:how to increase part of a variable in linux如何在linux中增加部分变量
【发布时间】:2017-06-25 09:48:31
【问题描述】:

大家好,我在 linux 脚本中有以下功能。

#!/bin/bash
function add1{
   echo $1
   var1=$1
   echo input + 1 is [$var1+1]
}
add 1

我想获取输入并添加 1。因此,如果输入是 input_1,我想返回 input_2。 我的代码当前正在打印 input_1+1。我认为这是因为我正在尝试将整数添加到字符串中,但我不确定是否有其他方法可以做到这一点。 有人可以指出我正确的方向吗?

【问题讨论】:

  • input_1 是字符串类型,你怎么能指望它做正常的整数类型操作!
  • 这就是我的想法。那么在这种情况下就不可能了?
  • 尝试使用内置的 bash 计算器表达式更改 [$var1+1] 部分:$(($var1 + 1)) 甚至 $(($1+1))(您不需要 var1)。另外,函数名是add1,而不是add
  • @John - 不,这并非不可能。如果输入的性质始终相同,您可以在_ 处拆分字符串,然后添加数字并再次附加拆分的前半部分。但是,您必须使用脚本来完成所有这些工作。 (注意 - 我不是 bash 专家。)
  • 谢谢@Am_I_Helpful 我会尝试拆分字符串。

标签: linux bash


【解决方案1】:

您的代码出现语法错误,因为您错过了一个空格,然后您的函数被命名为add1,但您调用了add。函数声明应该是:

function add {

但是,这不符合 POSIX,add() { 是首选。

有几种方法可以实现您的要求。这是我的:

#!/bin/bash

add() {
   var1=$1
   num=${var1##*_}       # Extract the number after the _
   name=${var1%%_*}      # Extract the name before the _

   echo "input + 1 is: ${name}_$((num+1))"
}
add input_1

给予:

input + 1 is: input_2

注意我在num上加1的算术运算是$((num+1))

【讨论】:

  • 如果输入应该支持多个_,例如foo_bar_1,则名称应使用name=${var1%_*} 提取(仅单个% 以消除最短匹配)。这将提取foo_bar,而具有两个%% 的解决方案将仅提取foo
【解决方案2】:

对于单行解决方案:

function add() {
  echo "input + 1 is: ${1%_*}_$((${1##*_}+1))"
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多