bash 関数の switch ステートメントで空の文字列変数を変更します。

bash 関数の switch ステートメントで空の文字列変数を変更します。

だから私は空の文字列変数を最初の引数として受け取り、2番目の引数として文字を受け取るbashにこの関数を持っています。

function check_cases {
    case $2 in
        r) $1=$(echo "$1 Read");;
        w) $1=$(echo "$1 Write");;
        x) $1=$(echo "$1 Execution");;
    esac
}

文字列変数を連結するさまざまな方法を試しましたが、常に次のように表示されます。

=: command not found

=演算子について。関数内にローカル文字列変数を作成して消去します。

local var=""

文字変数として渡します。

check_cases "$var" "$char"

現在の状況とこの問題を解決する方法を知りたいです。

答え1

何かしようとしているようです。参照として渡すタイプ機能。

これは実際にはスクリプトには適していませんbash。私たちはできる徐々に進むコマンドで動作しますevalが、危険な動作(文字列に含まれるコマンドの評価)が多いため、お勧めできません。

存在するこれたとえば、コードは次のようになります。

function check_cases {
    case $2 in
        r) eval $1=\"\$$1 Read\" ;;
        w) eval $1=\"\$$1 Write\" ;;
        x) eval $1=\"\$$1 Execution\" ;;
    esac
}

check_cases var r
check_cases var w
check_cases var x

echo $var

代わりに、一般的に使用する方が良いです。値として渡す意味論: 必要な値を返し、呼び出し側に変数を追加します。

例えば

function check_cases {
    case $1 in
        r) echo " Read" ;;
        w) echo " Write" ;;
        x) echo " Execution" ;;
    esac
}

var="$var$(check_cases r)"
var="$var$(check_cases w)"
var="$var$(check_cases x)"

echo $var

答え2

何を達成したいのかは明確ではありませんが、とにかく...

まず、割り当て構文は次のとおりです。

$val=value

しかし、

val=value

それでも

1=value

変数名は数字で始めることができないため、機能しません。

位置パラメーターに値を指定するには、次のようにします。

function check_cases {
    case $2 in
        r) append=' Read';;
        w) append=' Write';;
        x) append=' Execution';;
    esac
    set "$1""$append" "$2" # notice no space between "$1" and "$append"
    echo "$@" # print all parameters
    echo Number of parameters: $#
}

関連情報