1
我想寫一個簡單的bash腳本來顯示兩個變量之間的差異,假定兩個變量都包含具有不同值的相同參數。看看$sam
和$pish
變量。它們是相同的,除了參數driver_mode
是1
在$sam
和2
在$pish
。爲了做這個比較,我將每個變量存儲到一個單獨的數組中,然後逐個比較每個元素。比較兩個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
運行上面的bash腳本給我的錯誤:
./test: line 12: firmware_path=/home/release/firmware/: syntax error: operand expected (error token is "/home/release/firmware/")
我想+1,因爲你的第一款,但隨後你的最後一個由自己的錯誤的確切方式,第一段是正確取消它。 (也就是說,你可以寫'index'而不是'$ index'的原因是數組的索引是一個算術上下文,就像'-ne'的參數一樣。) – ruakh
@ruakh它現在是固定的;-) – janos
@ruakh,實際上,'$ {!array_old [@]}'擴展爲數字索引。我習慣在字符串上下文中使用索引,並完全忘記了這個特性。謝謝。 –