1
私は2つの変数の違いを示す単純なBashスクリプトを書こうとしています。両方の変数に同じ値の異なるパラメータが含まれていることを前提としています。 $sam
と$pish
の変数を見てください。パラメータはdriver_mode
が$sam
で1
であり、2
が$pish
であることを除き、同じです。この比較を行うために、各変数を別々の配列に格納し、各要素を1つずつ比較します。上記のbashスクリプトを実行2つのbash変数を比較する
#!/bin/bash
sam="driver_mode=2 firmware_path=/home/release/firmware/ onebox_zone_enabled=0x10001 ta_aggr=4 skip_fw_load=0 fw_load_mode=1 sdio_clock=40000 enable_antenna_diversity=0 coex_mode=1 obm_ant_sel_val=2 wlan_rf_power_mode=0 bt_rf_power_mode=0 zigb_rf_power_mode=0 country_code=840 bt_rf_tx_power_mode=1 bt_rf_rx_power_mode=0"
pish="driver_mode=1 firmware_path=/home/release/firmware/ onebox_zone_enabled=0x10001 ta_aggr=4 skip_fw_load=0 fw_load_mode=1 sdio_clock=40000 enable_antenna_diversity=0 coex_mode=1 obm_ant_sel_val=2 wlan_rf_power_mode=0 bt_rf_power_mode=0 zigb_rf_power_mode=0 country_code=840 bt_rf_tx_power_mode=1 bt_rf_rx_power_mode=0"
read -r -a array_old <<< "$sam"
read -r -a array_new <<< "$pish"
for index in "${!array_old[@]}"; do
if [[ ${array_old[index]} -ne ${array_new[index]} ]]; then
echo ${array_old[index]} 'to' ${array_new[index]}
fi
done
は私にエラーを与える:
./test: line 12: firmware_path=/home/release/firmware/: syntax error: operand expected (error token is "/home/release/firmware/")
私はので、あなたの最初の段落の+1したいのですが、その後、あなたの最後の1は、最初の段落が正しかったことを正確な方法で間違っていることによってそれを相殺します。 (つまり、 '$ index'ではなく' index'を書くことができる理由は、配列インデックスは '-ne'の引数と全く同じ算術コンテキストです) – ruakh
@ruakhこれで修正されました;-) – janos
@ruakh、実際には '$ {!array_old [@]}'は数値インデックスに展開されます。私は文字列コンテキストでインデックスを使用するために使用され、この機能を完全に忘れています。ありがとう。 –