Выход скрипта Bash [дубликат]

По моим словам, конкатенация строк быстрее, чем объединение массива. видел эти тестовые случаи

http://jsperf.com/array-join-vs-string-connect http://jsperf.com/join-concat/ 2

14
задан that other guy 30 June 2018 в 23:16
поделиться

7 ответов

Переменные расширяются в двойных кавычках, но не в одиночных кавычках:

 $ 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"
23
ответ дан Aleks-Daniel Jakimenko-A. 17 August 2018 в 10:40
поделиться
  • 1
    Альтернативно, echo "test text \"here_is_some_test_text_$counter\" \"output\"" ... Побег двойных кавычек, которые вы не хотите интерпретировать оболочкой. – twalberg 17 January 2014 в 20:03
  • 2
    Не забывайте, что вы должны процитировать "$FILE". – Aleks-Daniel Jakimenko-A. 18 January 2014 в 06:15
  • 3
    @ Aleks-DanielJakimenko-A. Нужно ли это? – Josh Detwiler 2 July 2018 в 20:24
  • 4
    @JoshDetwiler Короче говоря: да . Ответ, который вы связали, хорош и касается всех подробностей, но цитирование переменной никогда не болит, и чаще всего кавычки действительно required для правильного поведения. – Aleks-Daniel Jakimenko-A. 3 July 2018 в 21:02

Вывести переменную, обернутую одинарными кавычками:

printf "'"'Hello %s'"'" world
0
ответ дан Elior Malul 17 August 2018 в 10:40
поделиться

использовать printf:

printf 'test text "here_is_some_test_text_%s" "output"\n' "$counter" >> ${FILE}
6
ответ дан glenn jackman 17 August 2018 в 10:40
поделиться

Вы можете сделать это следующим образом:

$ 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
0
ответ дан Kulimak Joco 17 August 2018 в 10:40
поделиться

Наиболее читаемый, функциональный способ использует фигурные скобки внутри двойных кавычек.

'test text "here_is_some_test_text_'"${counter}"'" "output"' >> "${FILE}"
2
ответ дан Paul Back 17 August 2018 в 10:40
поделиться
  • 1
    Дубликат ответа Игнасио Васкеса-Абрамса с 10 месяцев назад – Jonas Berlin 14 October 2016 в 22:00
  • 2
    @JonasBerlin: Не совсем дубликат, но, учитывая, что предполагаемое улучшение evental приводит к тому, что исходное решение работает, это должно быть comment , а не ответ. – mklement0 14 October 2016 в 22:06
  • 3
    К сожалению, у меня нет репутации, чтобы оставить комментарий. – Paul Back 17 October 2016 в 17:55

с подоболочкой:

var='hello' echo 'blah_'`echo $var`' blah blah';
0
ответ дан R.Sicart 17 August 2018 в 10:40
поделиться
  • 1
    Не работает, эхо blah_`echo $var` blah blah – Jonas Berlin 14 October 2016 в 21:57
  • 2
    Вы правы, их нужно окружать двойными кавычками вместо простых котировок. Я исправил ответ. – R.Sicart 18 October 2016 в 14:40
  • 3
    Ваш новый ответ сжимает любые пробелы в $var .. см. Ответ Игнасио Васкес-Абрамса .. – Jonas Berlin 19 October 2016 в 19:04
  • 4
    – tripleee 2 July 2018 в 20:17

Использовать heredoc:

cat << EOF >> ${FILE}
test text "here_is_some_test_text_$counter" "output"
EOF
4
ответ дан William Pursell 17 August 2018 в 10:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: