2013-11-11 2 views
3

Я могу использовать herestrings для передачи строки команде, например.Использование двух здесь строк

cat <<< "This is a string" 

Как я могу использовать herestrings передать две строки в команде? Как я могу сделать что-то вроде

### not working 
diff <<< "string1" "string2" 

### working but overkill 
echo "string1" > file1 
echo "string2" > file2 
diff file1 file2 
+0

Это [здесь строка] (http://www.gnu.org/software/bash/manual/bashref.html#Here-Strings), а не [здесь документ] (http: //www.gnu .org/программное обеспечение/Баш/ручной/bashref.html # Здесь-документы). –

+0

Вы пытаетесь передать две строки 'diff'? – devnull

+0

Я изменил его в своем посте. Я всегда считал, что herestring является подмножеством heredocs, т. Е. Каждая herestring также является heredoc, но я знаю различия в синтаксисе. Я предполагаю, что ответ один и тот же для herestrings и heredocs. – pfnuesel

ответ

6

Вы не можете использовать две опоры для ввода одной и той же команды. По сути, последний заменит все остальные. Демонстрация:

cat <<< "string 1" <<< "string 2" <<< "string 3" 
# only shows "string 3" 

С другой стороны, если то, что вы хотите, действительно дифф двух непосредственных входов, вы можете сделать это следующим образом:

diff <(echo "string 1") <(echo "string 2") 
+0

Это прекрасно работает. Можете ли вы объяснить мне, почему у меня не может быть пробела между '<' и '('? – pfnuesel

+1

@pfnuesel. Обратитесь к документации по процессу (http://www.gnu.org/software/bash/manual/ bashref.html # Process-Substitution). –

+0

О пробеле между '<' и '(', follow @ gniourf_gniourf 's ссылка (+1). Можно сказать, что это просто определено таким образом, как вы не можете поместить пробел в середине '[[' или '' <<< '. Вероятно, существует и реальная причина устранения двусмысленности. –

2

Вы можете просто сцепить две строки:

cat <<< "string1""string2" 

(не отсутствие пространства между ними). Строка теперь состоит из одного слова, содержимое которого является содержимым двух строк.

Смежные вопросы