2017-06-25 9 views
0

こんにちは、私はLinuxのスクリプトで次の機能を持っています。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を印刷しています。これは、文字列に整数を追加しようとしているからだと思いますが、これを行うことができる他の方法はわかりません。 誰かが私に正しい方向を向けることができますか?

+1

INPUT_1あなたはそれが通常の整数型の操作を行うことを期待できますか? –

+0

これは私が考えていたものです。この場合、それは不可能になりますか? – John

+0

組み込みのbash電卓の式である$(($ var1 + 1))や '$(($ 1 + 1))'を使って[$ var1 + 1] 'var1')。また、関数名は 'add1'ではなく' add'です。 –

答えて

2

スペースを忘れたためにコードに構文エラーが発生し、関数名が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 

注Iはnumに1を加算演算が一行溶液について$((num+1))

+1

入力が複数の「_」をサポートする必要がある場合。 'foo_bar_1'ならば、名前は' name = $ {var1%_ *} '(*最短一致を切り捨てるために単一の'% 'のみ)で抽出する必要があります。これは 'foo_bar'を抽出しますが、2つの' %% 'を持つ解決法は 'foo'だけを抽出します。 – weibeld

1

ある:

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