попробуйте скопировать libs в глобальный каталог. Для этого типа
sudo cp /path/to/lib /usr/lib
сделайте это для каждой библиотеки, которую вы хотите скопировать.
[[ "bcd" =~ "ab" ]] [[ "abc" =~ "ab" ]]
скобки для теста, а поскольку это двойные скобки, это может привести к некоторым дополнительным тестам, например =~.
Итак, вы может использовать эту форму как-то вроде
var1="ab"
var2="bcd"
if [[ "$var2" =~ "$var1" ]]; then
echo "pass"
else
echo "fail"
fi
Edit: corrected "= ~", щелкнула.
Использование шаблонов имен bash (также называемых шаблонами glob)
substr=ab
[[ abc == *"$substr"* ]] && echo yes || echo no # yes
[[ bcd == *"$substr"* ]] && echo yes || echo no # no
Следующие два подхода будут работать в любой среде, совместимой с POSIX, а не только в bash:
substr=ab
for s in abc bcd; do
if case ${s} in *"${substr}"*) true;; *) false;; esac; then
printf %s\\n "'${s}' contains '${substr}'"
else
printf %s\\n "'${s}' does not contain '${substr}'"
fi
done
substr=ab
for s in abc bcd; do
if printf %s\\n "${s}" | grep -qF "${substr}"; then
printf %s\\n "'${s}' contains '${substr}'"
else
printf %s\\n "'${s}' does not contain '${substr}'"
fi
done
Оба вышеупомянутого выхода:
'abc' contains 'ab'
'bcd' does not contain 'ab'
Преимущество первого заключается в том, что не разворачивается отдельный процесс grep.
Обратите внимание, что вместо echo "${foo}" я использую printf %s\\n "${foo}", потому что echo может калечить ${foo}, если он содержит обратную косую черту.
Обратите внимание на [[ и ":
[[ $a == z* ]] # True if $a starts with an "z" (pattern matching).
[[ $a == "z*" ]] # True if $a is equal to z* (literal matching).
[ $a == z* ] # File globbing and word splitting take place.
[ "$a" == "z*" ] # True if $a is equal to z* (literal matching).
Так как @glenn_jackman сказал, но помните, что если вы завернете весь второй член в двойных кавычках, он переключит тест на литерал соответствие.
Источник: http://tldp.org/LDP/abs/html/comparison-ops.html
Это самое портативное решение, будет работать даже на старых оболочках Bourne и оболочке Korn
#!/bin/bash
case "abcd" in
*$1*) echo "It's a substring" ;;
*) echo "Not a substring" ;;
esac
Пример прогона:
$ ./case_substr.sh "ab"
It's a substring
$ ./case_substr.sh "whatever"
Not a substring
Обратите внимание, что вам не нужно специально использовать echo, вы можете использовать exit 1 и exit 0 для обозначения успеха или сбоя.
То, что мы могли бы сделать, также - создать функцию (который может быть использован в больших сценариях, если необходимо) с конкретными значениями возврата (0 по совпадению, 1 не соответствует):
$ ./substring_function.sh
ab is substring
$ cat substring_function.sh
#!/bin/sh
is_substring(){
case "$2" in
*$1*) return 0;;
*) return 1;;
esac
}
main(){
if is_substring "ab" "abcdefg"
then
echo "ab is substring"
fi
}
main $@
$ grep -q 'ab' <<< "abcd" && echo "it's a substring" || echo "not a substring"
it's a substring
Этот конкретный подход полезен для операторов if-else в bash. Также в основном переносится
$ awk '$0~/ab/{print "it is a substring"}' <<< "abcd"
it is a substring
$ python -c 'import sys;sys.stdout.write("it is a substring") if "ab" in sys.stdin.read() else exit(1)' <<< "abcd"
it is a substring
$ ruby -e ' puts "is substring" if ARGV[1].include? ARGV[0]' "ab" "abcdef"
is substring
Как и ответ Эдвина, но с улучшенной переносимостью для posix & amp; ksh и прикосновение менее шумное, чем у Ричарда:
substring=ab
string=abc
if [ "$string" != "${string%$substring*}" ]; then
echo "$substring IS in $string"
else
echo "$substring is NOT in $string"
fi
string=bcd
if [ "$string" != "${string%$substring*}" ]; then
echo "$string contains $substring"
else
echo "$string does NOT contain $substring"
fi
Выход:
abc contains ab
bcd does NOT contain ab