有没有更好的方法来检查两个字符串是否相等,而忽略给定的定界符,例如:
function is_equal() {
local str1="$1"
local delim1="$2"
local str2="$3"
local delim2="$4"
IFS=$delim1 read -r -a array1 <<< "$str1"
IFS=$delim2 read -r -a array2 <<< "$str2"
if [[ ${#array1[@]} -ne ${#array2[@]} ]]; then
return 1
fi
str1raw=$(IFS='' echo "${array1[*]}")
str2raw=$(IFS='' echo "${array2[*]}")
if [ "${str1raw}" != "${str2raw}" ]; then
return 1
fi
return 0
}
is_equal "!etc!daemon!sys.conf" "!" "/etc/daemon/sys.conf" "/"
这行得通,但我不想与数组一起使用。
只要您的字符串中包含文本数据(仅表示可打印的字符)是安全的,那么在比较之前,可以使用参数扩展将分隔符替换为不可打印的字符。这样,在比较期间,两个字符串共享相同的定界符:
if [ "${str1//$delim1/\\x01}" = "${str2//$delim2/\\x01}" ] ; then
echo "strings are equal"
fi
我为定界符使用了不可打印的字符,以确保定界符不会成为数据本身的一部分。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句