Интерфейсу, который является членом моста, нельзя было присвоить дюйм/с ему непосредственно. Вы присваиваете адрес интерфейсу моста вместо этого, например.
ifconfig br0 0.0.0.0
Вам нужна двойная цитата в замене команд, в противном случае оболочка будет выполнять полевое расщепление с результатом замены команды:
$ env "$(echo 'VALUE="this is a test"')" ./somescript.sh
"this is a test"
для ENV
Чтение из файла, вы должны Пусть Shell делает Splifing, но установить , если только нью
, чтобы только ваша команда не сломалась с пространством:
$ IFS='
'
$ env $(cat .vars) ./somescript.sh
Если вы хотите прочитать из файла, лучше, если вы просто источник (aka DOT ) файл в somescript.sh
:
#!/bin/bash
. .vars
: The rest of script go here
Мне кажется, вы слишком все усложняете.
$ env FOO='this is a test' printenv | egrep -i foo
FOO=this is a test
Кстати, кавычки не являются частью этойпроблемы. Используйте двойные кавычки, если вы хотите, например, заменить переменную в вашем значении; используйте одинарные кавычки, если вы хотите предотвратить подстановку переменных и т. д.
Черт возьми, используйте подстановку команд, если это вам подходит. Используйте отформатированные строки символов. Используйте оба.
$ env FOO=$'this\tis a test' printenv | egrep -i foo | cat -t
FOO=this^Iis a test
$ env FOO="$(echo $'this\tis a test')" printenv | egrep -i foo | cat -t
FOO=this^Iis a test
К сожалению, это может быть лучшим примером использования подстановки команд. Идея состоит в том, чтобы поместить вывод некоторой требуемой командыв переменную, а не просто безосновательно использовать подстановку команд там, где она не нужна.
$ env FOO="$(man man)" printenv | egrep -iA5 foo=
FOO=man(1) man(1)
NAME
man - format and display the on-line manual pages
На самом деле, есть гораздо лучший способ сделать это, и вы можете объявить несколько переменных без каких-либо проблем.
env {'VALUE=thisisatest','FOO=this is a test'} printenv