2016-11-13 221 views
1

我想寫一個簡單的bash腳本來顯示兩個變量之間的差異,假定兩個變量都包含具有不同值的相同參數。看看$sam$pish變量。它們是相同的,除了參數driver_mode1$sam2$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/")

回答

5

-ne運營商是一個整數comparison operator。比較字符串使用!=

for index in "${!array_old[@]}"; do 
    if [[ ${array_old[index]} != "${array_new[index]}" ]]; then 
    echo ${array_old[index]} 'to' ${array_new[index]}  
    fi 
done 
+1

我想+1,因爲你的第一款,但隨後你的最後一個由自己的錯誤的確切方式,第一段是正確取消它。 (也就是說,你可以寫'index'而不是'$ index'的原因是數組的索引是一個算術上下文,就像'-ne'的參數一樣。) – ruakh

+1

@ruakh它現在是固定的;-) – janos

+0

@ruakh,實際上,'$ {!array_old [@]}'擴展爲數字索引。我習慣在字符串上下文中使用索引,並完全忘記了這個特性。謝謝。 –