Ответ 1
Резюме
-
Вставка
\n
p="${var1}\n${var2}" echo -e "${p}"
-
Вставка новой строки в исходный код
p="${var1} ${var2}" echo "${p}"
-
Использование
$'\n'
(только bash и zsh)p="${var1}"$'\n'"${var2}" echo "${p}"
Подробнее
1. Вставка \n
p="${var1}\n${var2}"
echo -e "${p}"
echo -e
интерпретирует два символа "\n"
как новую строку.
var="a b c"
first_loop=true
for i in $var
do
p="$p\n$i" # Append
unset first_loop
done
echo -e "$p" # Use -e
Избегайте дополнительной командной строки
var="a b c"
first_loop=1
for i in $var
do
(( $first_loop )) && # "((...))" is bash specific
p="$i" || # First -> Set
p="$p\n$i" # After -> Append
unset first_loop
done
echo -e "$p" # Use -e
Используя функцию
embed_newline()
{
local p="$1"
shift
for i in "[email protected]"
do
p="$p\n$i" # Append
done
echo -e "$p" # Use -e
}
var="a b c"
p=$( embed_newline $var ) # Do not use double quotes "$var"
echo "$p"
2. Вставка новой строки в исходный код
var="a b c"
for i in $var
do
p="$p
$i" # New line directly in the source code
done
echo "$p" # Double quotes required
# But -e not required
Избегайте дополнительной командной строки
var="a b c"
first_loop=1
for i in $var
do
(( $first_loop )) && # "((...))" is bash specific
p="$i" || # First -> Set
p="$p
$i" # After -> Append
unset first_loop
done
echo "$p" # No need -e
Используя функцию
embed_newline()
{
local p="$1"
shift
for i in "[email protected]"
do
p="$p
$i" # Append
done
echo "$p" # No need -e
}
var="a b c"
p=$( embed_newline $var ) # Do not use double quotes "$var"
echo "$p"
3. Использование $'\n'
(менее портативный)
bash и zsh интерпретирует $'\n'
как новую строку.
var="a b c"
for i in $var
do
p="$p"$'\n'"$i"
done
echo "$p" # Double quotes required
# But -e not required
Избегайте дополнительной командной строки
var="a b c"
first_loop=1
for i in $var
do
(( $first_loop )) && # "((...))" is bash specific
p="$i" || # First -> Set
p="$p"$'\n'"$i" # After -> Append
unset first_loop
done
echo "$p" # No need -e
Используя функцию
embed_newline()
{
local p="$1"
shift
for i in "[email protected]"
do
p="$p"$'\n'"$i" # Append
done
echo "$p" # No need -e
}
var="a b c"
p=$( embed_newline $var ) # Do not use double quotes "$var"
echo "$p"
Вывод одинаков для всех
a
b
c
Особая благодарность вкладчикам этого ответа: kevinf, Гордон Дэвиссон, l0b0, Dolda2000 и tripleee.
ИЗМЕНИТЬ
- См. также ответ BinaryZebra, содержащий много деталей.
- Ответ Abhijeet Rastogi и Димитрий ответ объясняют, как избежать цикла
for
выше bash фрагменты.