По моим словам, конкатенация строк быстрее, чем объединение массива. видел эти тестовые случаи
http://jsperf.com/array-join-vs-string-connect http://jsperf.com/join-concat/ 2
Переменные расширяются в двойных кавычках, но не в одиночных кавычках:
$ name=World
$ echo "Hello $name"
Hello World
$ echo 'Hello $name'
Hello $name
Если вы можете просто переключать кавычки, сделайте это.
Если вы предпочитаете придерживаться одинарные кавычки, чтобы избежать дополнительного экранирования, вместо этого вы можете смешивать и сопоставлять кавычки по одному и тому же аргументу:
$ echo 'single quoted. '"Double quoted. "'Single quoted again.'
single quoted. Double quoted. Single quoted again.
$ echo '"$name" has the value '"$name"
"$name" has the value World
Применимо к вашему делу:
echo 'test text "here_is_some_test_text_'"$counter"'" "output"' >> "$FILE"
Вывести переменную, обернутую одинарными кавычками:
printf "'"'Hello %s'"'" world
использовать printf:
printf 'test text "here_is_some_test_text_%s" "output"\n' "$counter" >> ${FILE}
Вы можете сделать это следующим образом:
$ counter=1 eval echo `echo 'test text \
"here_is_some_test_text_$counter" "output"' | \
sed -s 's/\"/\\\\"/g'` > file
cat file
test text "here_is_some_test_text_1" "output"
Объяснение: Команда Eval обрабатывает строку как команду, поэтому после правильного количества экранирования она даст желаемый результат.
Он говорит, что исполняет следующую строку как команду:
'echo test text \"here_is_some_test_text_$counter\" \"output\"'
Команда снова в одной строке:
counter=1 eval echo `echo 'test text "here_is_some_test_text_$counter" "output"' | sed -s 's/\"/\\\\"/g'` > file
Наиболее читаемый, функциональный способ использует фигурные скобки внутри двойных кавычек.
'test text "here_is_some_test_text_'"${counter}"'" "output"' >> "${FILE}"
с подоболочкой:
var='hello' echo 'blah_'`echo $var`' blah blah';
$var
.. см. Ответ Игнасио Васкес-Абрамса ..
– Jonas Berlin
19 October 2016 в 19:04
Использовать heredoc:
cat << EOF >> ${FILE}
test text "here_is_some_test_text_$counter" "output"
EOF
echo "test text \"here_is_some_test_text_$counter\" \"output\""
... Побег двойных кавычек, которые вы не хотите интерпретировать оболочкой. – twalberg 17 January 2014 в 20:03"$FILE"
. – Aleks-Daniel Jakimenko-A. 18 January 2014 в 06:15