Итак, вот выводы: Предположим, я создаю файлы в каталоге, скажем: john, alex_john, alex_john1 и john1, и я выполняю следующее:
[root@localhost ~]# ls | grep "john"
john
alex_john
alex_john1
john1
[root@localhost ~]# ls | grep "john\$" <==here it would insert end of line
john
alex_john
[root@localhost ~]#
Поэтому для второй группы будут напечатаны только файлы, заканчивающиеся на john.
-121--289103- К мосту не добавлен физический интерфейс ( envmw
). Также необходимо перевести этот интерфейс в неразборчивый режим без IP-адреса:
brctl addif virbr0 envmw
ip addr add 0/0 dev envmw
ip addr del 192.168.66.1/24 dev envmw
ip link set envmw promisc on
Выполнение этих команд из удаленного сеанса - плохая идея, поскольку он изменяет конфигурацию интерфейса. Это, в свою очередь, приведет к отключению любого удаленного трафика, включая удаленный сеанс.
-121--289098-Конечно:
N=444;M=555;echo "$(($N * $M))"
или
N=444;M=555;O="$(($N * $M))";echo $O
или
N=444;M=555;echo $N*$M | bc -l
Не забудьте запустить:
unset N && unset M
после однослойной оболочки, чтобы оболочка не загрязнялась бесполезными переменными.
На самом деле здесь можно использовать стандартные расширения параметров (вам просто не хватило подстановочного знака):
$ args=a:b:c:
$ x=b
$ echo "${args%$x:*}"
a:
$ if [ "$args" != "${args#*$x:}" ]; then echo 'b: is present'; fi
b: is present
(или в равной степени"${args%$x:*}"
)
Недостатком является то, что вам нужно поставить двоеточие после b
, поэтому a:b
или простое b
не будет соответствовать, а также будет соответствовать a:bb:c
. ([[ $var = *$x:* ]]
, а также очевидное совпадение шаблона с case
имеют тот же недостаток.)
Совпадение со всеми b
, b:c
, a:b
, a:b:c
, не совпадающее с a:bb:c
, было бы немного сложнее. Все, о чем я могу думать, это что-то вроде этого:
args=a:b:c
x=b
IFS=: # affects globally
set -f # affects globally...
for x in $args; do
if [ "$x" = "b" ]; then
echo "b is present"
fi
done
Если вы не хотите выписывать все случаи:
args=a:b:c
x=b
found=0
case "$args" in
$x) found=1;;
$x:*) found=1;;
*:$x) found=1;;
*:$x:*) found=1;;
esac
if [ "$found" = 1 ]; then...; fi
Намного проще с регулярными выражениями (в Bash):
args=b:c
x=b
if [[ $args =~ (^|:)$x(:|$) ]]; then
echo "b found"
fi
Следующее будет работать в sh:
if echo "$hasArgs" | grep -q "$x"; then
Это не одна -строка, но она вполне удобочитаема и может быть расширена для проверки любого количества аргументов:
hasArgs="a:b:c"
x=b
case "$hasArgs" in
*$x*)
echo "$x is present"
;;
esac