Bash
bash + 如何驗證單詞是否在值列表中
如何辨識參數中的所有值 - var_general都在var_get
例如
var_general="sdb sdc sdd sde sdf sdg" var_get="sdb sdc sdd sde sdf sdg sdh sdi"
根據此範例將獲得狀態 ok
另一個例子
var_general="sdb sdj sdd sde sdf sdg" var_get="sdb sdc sdd sde sdf sdg sdh sdi"
我們將獲得狀態失敗(因為 sdj 不在 var_get 中)
bash
+comm
+**tr
**解決方案:var_general="sdb sdc sdd sde sdf sdg" var_get="sdb sdc sdd sde sdf sdg sdh sdi" if [[ $(comm -23 <(tr ' ' '\n' <<<"$var_general" | sort) <(tr ' ' '\n' <<<"$var_get" | sort)) ]]; then echo "status: Fail" else echo "status: Ok" fi
tr ' ' '\n' <<<"$var_general"
- 將空格轉換為換行符/換行符comm -23 FILE1 FILE2
- 比較文件和列印行獨有的FILE1
。如果文件FILE1
不包含不同的項目 - 那麼它被接受為文件的子集FILE2
此功能在我的測試中工作以完成此操作:
are_in () { local match_list="$1" local compare_list="$2" until [[ -z "$match_list" ]]; do if ( grep -q "$(awk '{print $1}' <<<"$match_list")" <<<"$compare_list" ); then match_list="$(awk '{$1=""; print $0}' <<<"$match_list")" else echo "Fail" && return 1 fi done echo "Okay" && return 0 }
使用:
$ var_general="sdb sdc sdd sde sdf sdg" $ var_get="sdb sdc sdd sde sdf sdg sdh sdi" $ are_in "$var_general" "$var_get"; echo $? Okay 0 $ var_general="sdb sdj sdd sde sdf sdg" $ var_get="sdb sdc sdd sde sdf sdg sdh sdi" $ are_in "$var_general" "$var_get"; echo $? Fail 1
沒有這個功能,它基本上只是:
t_var="$var_general" until [[ -z "$t_var" ]]; do if ( grep -q "$(awk '{print $1}' <<<"$t_var")" <<<"$var_get" ); then t_var="$(awk '{$1=""; print $0}' <<<"$t_var")" else echo "Fail" && return 1 fi done