"local -n"を使用すると、ターゲットシステムbashでパラメータエラーが発生します。どうすれば解決できますか?

clearCntbashバージョンのLinuxでは正常に機能しますGNU bash, version 4.3.48が、Linuxターゲットシステムでは機能しない機能を含むスクリプトがあります。ターゲットシステムのbash(バージョン:GNU bash, version 4.1.2(1) )コマンドは許可されていません)local -n

次のコードは、「基本」スクリプトフロー内で関数を複数回使用するスクリプトから抜粋したものですclearCnthh

#!/bin/bash

# clearCnt(src,dst)    
clearCnt()
{
local i=0
local -n src=$1
local -n dst=$2

while test ${src[$i]} != 'xxx'; do

    let dst[$i]=0
    echo ${src[$i]} ${dst[$i]}

    let i=i+1
done

return
}

hdc=0
hh={
GT5849503583053053
ST5849503583053063
MT6849503583053053
KT5849503583053053
xxx}

clearCnt hh hdc
exit

この問題をどのように解決できますか?

ベストアンサー1

local -n名前参照変数が定義されます。

bashターゲットシステムのバージョンbash-4.3(名前参照を導入したシェルバージョン)以上にアップデートするか、そのバージョンのシェルをシステムの別の場所にインストールし、スクリプトで代わりに使用するようにしてください/bin/bash

また、このコードのすべての変数拡張は二重引用符で囲む必要があります。例えば、

while test ${src[$i]} != 'xxx'; do

次のように書く必要があります。

while test "${src[$i]}" != 'xxx'; do

または

while [ "${src[$1]}" != 'xxx' ]; do

おすすめ記事