Проблема с iOS 10.3.2
Подключение устройства с iOS 10.2 работает нормально
Вам не нужны подстановки команд для установки ваших переменных:
var1="database1="
var2="database2="
var3="database3="
Я думаю, вам нужны одинарные кавычки для добавления новой строки, но это выглядит довольно уродливо, если вы заключаете свои переменные в двойные кавычки.Двойные кавычки необходимы, если ваши переменные содержат символы пробела:
sed -i '/#variables/i\
'"$var1"'\
'"$var2"'\
'"$var3" /data1/create_database
С помощью GNU sed вы можете просто добавить несколько новых строк:
sed -i "/#variables/i$var1\n$var2\n$var3" /data1/create_database
Вы можете использовать управляющую последовательность(\n
)для вставки новой строки. Обратите внимание, что
sed -i "/#variables/i \
$var1\n$var2\n$var3" /data1/create_database
эквивалентно
sed -i "/#variables/i $var1\n$var2\n$var3" /data1/create_database
поэтому вам понадобится двойная обратная косая черта
sed -i "/#variables/i\\
$var1\n$var2\n$var3" /data1/create_database
Возможно также рассмотреть несколько выражений, чтобы сделать команду одной строкой, где каждое выражение фактически является строкой.
sed -i -e '/#variables/i\' -e "$var1\n$var2\n$var3" /data1/create_database
И, наконец, вам может понадобиться экранировать ваши переменные
var1=$(echo "database1=" | sed 's/[]\/$*.^&[]/\\&/g')
var2=$(echo "database2=" | sed 's/[]\/$*.^&[]/\\&/g')
var3=$(echo "database3=" | sed 's/[]\/$*.^&[]/\\&/g')
sed -i -e '/#variables/i\' -e "$var1\n$var2\n$var3" /data1/create_database
Вам нужно удвоить количество обратных косых черт, так как вы работаете в двойных кавычках:
sed -i "/#variables/i \\
$var1\\
$var2\\
$var3" /data1/create_database
И если у вас есть дела поважнее, чем считать эти чертовы обратные косые черты, вы можете позволить sed
позаботиться о деталях за вас, но это будет стоить вам кода:
sed -i "/#variables/{H;s/.*//;x;}
s/\\n/$var1&$var2&$var3&/
" /data1/create_database
Или это, где не упоминается новая строка:
sed -i "/#variables/{
h
s/.*/$var1/p
s/.*/$var2/p
s/.*/$var3/p
g
}" /data1/create_database
Конечно, при размещении переменных оболочки внутри sed необходимо соблюдать осторожность. код. Их нужно сначала стерилизовать, а потом использовать. Например, что, если в вашей оболочке есть косая черта '/'?