Вот еще один вариант использования jQuery grep. Pass true
в качестве третьего параметра, чтобы grep удалял элементы, соответствующие вашей функции.
users = $.grep(users, function(el, idx) {return el.field == "money"}, true)
Если вы уже используете jQuery, тогда не требуется прокладка, которая может быть полезна в отличие от использования Array.filter
.
Вам нужно только минимальное изменение; одинарная кавычка разделителя здесь-документа после <<
.
cat <<'EOF' >> brightup.sh
или эквивалентно обратная косая черта-escape it:
cat <<\EOF >>brightup.sh
Без цитирования здесь документ будет подвергаться переменной замене , backticks будут оцениваться и т. д., как вы обнаружили.
Если вам нужно развернуть некоторые, но не все значения, вам необходимо индивидуально избежать тех, которые вы хотите предотвратить.
cat <<EOF >>brightup.sh
#!/bin/sh
# Created on $(date # : <<-- this will be evaluated before cat;)
echo "\$HOME will not be evaluated because it is backslash-escaped"
EOF
будет производить
#!/bin/sh
# Created on Fri Feb 16 11:00:18 UTC 2018
echo "$HOME will not be evaluated because it is backslash-escaped"
. Как предложено @fedorqui , вот соответствующий раздел из man bash
:
Здесь Документы
Этот тип перенаправления инструктирует оболочку читать входные данные от текущего источника до тех пор, пока не появится строка, содержащая только разделитель (без конечных пробелов). Все строки, считываемые до этой точки, затем используются в качестве стандартного ввода для команды.
Формат здесь-документов:
<<[-]word here-document delimiter
Нет расширения параметров, команда подстановка, арифметическое расширение или расширение пути по слову. Если какие-либо символы в слове цитируются, разделитель является результатом удаления цитаты в слове, а строки в этом документе не будут расширены. Если слово без кавычек, все строки этого документа подвергаются расширению параметров, подстановке команд и арифметическому расширению. В последнем случае последовательность символов \ игнорируется, а \ должна использоваться для цитирования символов \, $ и `.
blockquote>
Это должно сработать, я только что проверил его, и он работал, как ожидалось: никакого расширения, замены или того, что произошло с вами.
cat <<< '
#!/bin/bash
curr=`cat /sys/class/backlight/intel_backlight/actual_brightness`
if [ $curr -lt 4477 ]; then
curr=$((curr+406));
echo $curr > /sys/class/backlight/intel_backlight/brightness;
fi' > file # use overwrite mode so that you don't keep on appending the same script to that file over and over again, unless that's what you want.
Использование следующего также работает.
cat <<< ' > file
... code ...'
Кроме того, стоит отметить, что при использовании heredocs, таких как << EOF
, замена и расширение переменных и т. п. место. Итак, сделаем что-то вроде этого:
cat << EOF > file
cd "$HOME"
echo "$PWD" # echo the current path
EOF
всегда приведет к расширению переменных $HOME
и $PWD
. Поэтому, если ваш домашний каталог /home/foobar
, а текущий путь - /home/foobar/bin
, file
будет выглядеть следующим образом:
cd "/home/foobar"
echo "/home/foobar/bin"
вместо ожидаемого:
cd "$HOME"
echo "$PWD"
<<<
доступны только начиная с Bash 3 и не переносятся на другие оболочки.
– tripleee
26 June 2015 в 03:23
Или, используя маркеры EOF, вам нужно указать начальный маркер, чтобы расширение не выполнялось:
#-----v---v------
cat <<'EOF' >> brightup.sh
#!/bin/bash
curr=`cat /sys/class/backlight/intel_backlight/actual_brightness`
if [ $curr -lt 4477 ]; then
curr=$((curr+406));
echo $curr > /sys/class/backlight/intel_backlight/brightness;
fi
EOF
IHTH