clearCnt
bashバージョンのLinuxでは正常に機能しますGNU bash, version 4.3.48
が、Linuxターゲットシステムでは機能しない機能を含むスクリプトがあります。ターゲットシステムのbash(バージョン:GNU bash, version 4.1.2(1) )
コマンドは許可されていません)local -n
。
次のコードは、「基本」スクリプトフロー内で関数を複数回使用するスクリプトから抜粋したものですclearCnt
。hh
#!/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