Bash에서 변수에 새 줄을 삽입하려고 합니다.
있습니다
var="a b c"
for i in $var
do
p=`echo -e $p'\n'$i`
done
echo $p
마지막 에코를 출력합니다.
a
b
c
변수 p에 새 줄이 포함되도록 합니다.그걸 어떻게 하는 거죠?
요약
소스 코드에 새 줄 삽입
p="${var1} ${var2}" echo "${p}"
-
p="${var1}"$'\n'"${var2}" echo "${p}"
사용.
echo -e
개종하기 위해\n
새로운 방침으로p="${var1}\n${var2}" echo -e "${p}"
세부 사항
소스 코드에 새 줄 삽입
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 "$@" 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"
사용.
$'\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 "$@" 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"
사용.
echo -e
개종하기 위해\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 "$@" 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"
⚠ 삽입
"\n"
문자열에 새 줄을 삽입하기에 충분하지 않습니다."\n"
단지 두 글자일 뿐입니다.
출력은 모두 동일합니다.
a
b
c
이 답변의 기여자들에게 특별한 감사를 표합니다: 케빈프, 고든 데이비슨, l0b0, 돌다2000, 그리고 트리플리.
- 자세한 내용은 BinaryZebra의 답변을 참조하십시오.
- 아비지트 라스토기의 대답과 디미트리의 대답은 어떻게 피할 수 있는지 설명합니다.
for
위의 Bash 스니펫의 루프입니다.
간단한 해결책은 새로운 선을 원하는 위치에 놓는 것입니다.
var="a
b
c"
예, 여러 줄로 묶은 과제입니다.
그러나 값을 보간할 때 값을 이중 따옴표로 묶어야 합니다. 그렇지 않으면 셸이 값을 공백으로 분할하여 새 줄을 하나의 공간으로 효과적으로 변환합니다(와일드카드도 확장합니다).
echo "$p"
일반적으로 위에서 설명한 동작을 특별히 원하지 않는 한 모든 변수 보간값을 이중 따옴표로 묶어야 합니다.
해라echo $'a\nb'
.
변수에 저장한 다음 새 줄을 그대로 사용하려면 사용법을 올바르게 인용해야 합니다.
var=$'a\nb\nc'
echo "$var"
또는 예제 프로그램을 문자 그대로 수정하려면:
var="a b c"
for i in $var; do
p="`echo -e "$p\\n$i"`"
done
echo "$p"
변수에 새 선을 삽입할 수 있는 수준은 세 가지입니다.음... 기술적으로는 4가지입니다. 하지만 처음 두 가지는 코드로 새 줄을 쓰는 두 가지 방법입니다.
1.1. 생성 시.
가장 기본적인 것은 이미 새 선으로 변수를 만드는 것입니다.우리는 이미 새 줄이 삽입된 코드에 변수 값을 씁니다.
$ var="a
> b
> c"
$ echo "$var"
a
b
c
또는 스크립트 코드 내부:
var="a
b
c"
네, 그것은 코드에서 필요한 곳에 글을 쓰는 것을 의미합니다.
1.2. 셸 견적서를 사용하여 작성합니다.
시퀀스는 Bash 및 Z 셸의 특수 셸 확장입니다.
var=$'a\nb\nc'
선은 셸에 의해 구문 분석되고 "var=""로newlinenewline 확장되며, 이것이 바로 변수 var를 원하는 것입니다.그것은 오래된 껍질에서는 작동하지 않을 것입니다.
셸 확장 사용.
기본적으로 여러 명령을 사용하는 명령 확장입니다.
반향-e
var="$( echo -e "a\nb\nc" )"
Bash 및 Z 셸 printf '%b'
var="$( printf '%b' "a\nb\nc" )"
Bash printf -v
printf -v var '%b' "a\nb\nc"
일반 단순 printf(대부분의 셸에서 작동):
var="$( printf 'a\nb\nc' )"
셸 실행 사용.
변수에 특수 문자가 포함된 경우 두 번째 옵션에 나열된 모든 명령을 사용하여 변수 값을 확장할 수 있습니다.
따라서 우리가 해야 할 일은 변수 내의 값을 가져와서 다음을 표시하는 몇 가지 명령을 실행하는 것입니다.
var="a\nb\nc" # var will contain the characters \n not a newline.
echo -e "$var" # use echo.
printf "%b" "$var" # use bash %b in printf.
printf "$var" # use plain printf.
공격자가 변수 값을 제어하는 경우 printf는 다소 안전하지 않습니다.
for 루프를 사용할 필요가 없습니다.
Bash 매개 변수 확장 기능의 이점은 다음과 같습니다.
var="a b c";
var=${var// /\\n};
echo -e $var
a
b
c
아니면 그냥 tr:
var="a b c"
echo $var | tr " " "\n"
a
b
c
sed
솔루션:
echo "a b c" | sed 's/ \+/\n/g'
결과:
a
b
c
var="a b c"
for i in $var
do
p=`echo -e "$p"'\n'$i`
done
echo "$p"
해결책은 변수 대체가 발생하는 현재 반복 중에 "로 삽입된 새 줄을 보호하는 것입니다.
언급URL : https://stackoverflow.com/questions/9139401/trying-to-embed-newline-in-a-variable-in-bash
'programing' 카테고리의 다른 글
Excel에서 웹 서비스 (0) | 2023.04.29 |
---|---|
"리소스가 파일 시스템과 동기화되지 않음" 방지 (0) | 2023.04.29 |
명령줄을 사용하여 디렉토리 및 해당 파일 삭제, 존재하지 않는 경우 오류 발생 안 함 (0) | 2023.04.29 |
bash 스크립트를 사용하여 파일 이름의 공백을 바꾸는 방법 (0) | 2023.04.29 |
이름이 ='인 잘못된 양식 컨트롤을 포커스할 수 없습니다. (0) | 2023.04.29 |