2016年5月25日 星期三

用Bash找某字串是否存在列表中

有時候只是要很快地知道某變數x是否存在列表list當中,直接在Bash裡面下:
  • list="str1 str2 str3"
  • x="str1"
  • [[ $list =~ $x ]] && echo 'yes' || echo 'no'
以上指令來自chemila在stack overflow上回答How do I check if a variable exists in a list in BASH。注意上面第三個指令是 =~ 而不是 ==,而且前後順序不可以更換。Bash的Double brackets的使用參考《What is the difference between test, [ and [[ ?》

舉例來說,想知道某個instruction是否存在某一堆指令集中可以執行:

$ list="fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm dtherm tpr_shadow vnmi flexpriority"

$ [[ $list =~ "rdtscp" ]] && echo 'yes' || echo 'no'
no

$ [[ $list =~ "sse4_1" ]] && echo 'yes' || echo 'no'
yes

$ [[ $list =~ "avx" ]] && echo 'yes' || echo 'no'
no

$ [[ $list =~ "mmx" ]] && echo 'yes' || echo 'no' 
yes

代表這個CPU有mmxsse4.1兩個指令集,但是沒有rdtscp與avx這兩個。詳細關於處理器的指令可參考《CPUID》《x86 instruction listings》

_EOF_

沒有留言:

張貼留言