IFS = $ '\ n'의 정확한 의미는 무엇입니까?
다음 예제에서는 IFS
환경 변수를 줄 바꿈 문자로 설정합니다.
IFS=$'\n'
- 합니까 뭐라고 달러 (cad) 기호 의미 정확히 ?
- 이 경우에 무엇을하고 있습니까?
- 이 특정 사용법에 대해 더 자세히 읽을 수있는 곳은 어디입니까 (Google은 검색에서 특수 문자를 허용하지 않는 방법을 다른 방법을 사용할 수 없는지)?
IFS
환경 변수가 무엇인지, \n
캐릭터가 무엇인지 (줄 바꿈) 무엇 인지 무엇 인지 다음 형식을 사용 IFS="\n"
하지 않았습니까?
예를 들어 파일의 모든 줄을 반복하고 for 루프를 사용하는 다음과 같이하십시오.
for line in (< /path/to/file); do
echo "Line: $line"
done
언어 IFS
줄 바꿈 문자로 설정되어 있지 않나요 ? 그것을 작동 시키려면 다음과 같이해야합니다.
OLDIFS=$IFS
IFS=$'\n'
for line in (< /path/to/file); do
echo "Line: $line"
done
IFS=$OLDIFS
참고 : 나는 똑같은 일을 할 수있는 다른 방법이 필요하지 않습니다 . 나는 이미 다른 많은 것을 알고 있습니다 ... 나는 $'\n'
궁금하고 누군가 나에게 궁금합니다 설명 할 수 있습니다.
일반적으로 bash
보편적으로 리터럴에서 이스케이프 시퀀스를 해석하지 않습니다. 그래서 당신은 작성하는 경우 \n
나 "\n"
또는 '\n'
LINEBREAK 소재 즉,-그것은 편지입니다 n
(첫 번째 경우) 또는 문자 백 슬래시 n
(다른 두 가지의 경우).
$'somestring'
이스케이프 시퀀스 가있는 고급 리터럴에 대한 구문입니다 . 그래서는 달리 '\n'
, $'\n'
실제로 LINEBREAK이다.
구문에 공식 이름 을 부여하기 위해 위해 양식의 호스트를 ANSI C 인용$'...'
이라고 합니다 .
즉, [ANSI] C 이미와 같이 백래시 이스케이프 시퀀스 가 인식되고 리터럴로 확장 (지원되는 이스케이프 시퀀스의 전체 목록은 아래 참조).
확장이 후에$'...'
문자열은 '...'
문자열 과 같은 방식으로 작동합니다. 즉, [추가] 쉘 확장이 적용되지 않는 리터럴로취급 됩니다.
예를 들어 $'\n'
리터럴 개행 문자로 확장합니다. 이는 일반 일반 bash 리터럴 ( '...'
또는 "..."
)이 할 수없는 것입니다. [1]
또 다른 흥미로운 기능이다 ANSI C- 인용 공용이 빠져 나갈 수로 '
(작은\'
인용 부호), 이는 , '...'
(일반 단일 인용 부호) 할 수 없습니다 :
echo $'Honey, I\'m home' # OK; this cannot be done with '...'
지원되는 이스케이프 시퀀스 목록 :
백 슬래시 이스케이프 시퀀스가있는 경우 다음과 같이 사용됩니다.
\ a 경고 (종)
\ b 백 스페이스
\ e \ E 이스케이프 문자 (ANSI C 아님)
\ f 양식 피드
\ n 줄 바꿈
\ r 캐리지 리턴
수평 탭
\ v 세로 탭
백 슬래시
작은 따옴표
큰 따옴표
\ nnn 8 진수 값이 8 진수 인 8 비트 문자 nnn (1 ~ 3 자리 숫자)
\ xHH 값이 16 진수 HH (1 진수 또는 2 진수) 인 8 비트 문자
\ uHHHH 값이 16 진수 값 HHHH (1 ~ 4 개의 16 진수) 인 유니 코드 (ISO / IEC 10646) 문자
\ UHHHHHHHH 16 진수 값 HHHHHHHH (16 진수 1-8 자) 인 유니 코드 (ISO / IEC 10646) 문자
\ cx control-x 문자
확장 된 결과는 달러 기호가없는 것처럼 작은 따옴표로 표시됩니다.
[1] 그러나 '...'및 "..."문자열에 실제 개행 문자를 삽입 할 수 있습니다 . 즉, 여러 줄에 걸쳐있는 문자열을 정의 할 수 있습니다.
에서 http://www.linuxtopia.org/online_books/bash_guide_for_beginners/sect_03_03.html :
"$ 'STRING'"형식의 단어는 특별한 방식으로 처리됩니다. 이 단어는 ANSI-C 표준에 지정된대로 백 슬래시 이스케이프 문자가 대체 된 문자열로 확장됩니다. 백 슬래시 이스케이프 시퀀스는 Bash 문서에서 찾을 수 있습니다.
스크립트가 줄 바꿈을 적절한 ANSI-C 표준으로 이스케이프하도록 강요하고 있다고 생각합니다.
기본 IFS를 다시 복구합니다 OLDIFS=$IFS
. 이 작업 은 필요하지 않습니다. 기본 IFS를 대체하지 않으려면 서브 쉘에서 새 IFS를 실행하십시오.
ar=(123 321); ( IFS=$'\n'; echo ${ar[*]} )
게다가 나는 당신이 이전 IFS를 완전히 회복한다고 정말로 믿지 않습니다. 같은 줄 바꿈을 피하기 위해 큰 따옴표를 사용해야합니다 OLDIFS="$IFS"
.
ANSI C 인용 문자열이 핵심입니다. @ mklement0 덕분에.
od 명령을 사용하여 ANSI C 인용 문자열을 테스트 할 수 있습니다.
echo -n $'\n' | od -c
echo -n '\n' | od -c
echo -n $"\n" | od -c
echo -n "\n" | od -c
출력 :
0000000 \n
0000001
0000000 \ n
0000002
0000000 \ n
0000002
0000000 \ n
0000002
출력으로 의미를 명확하게 알 수 있습니다.
변수에서 값을 검색하는 것과 같습니다.
VAR='test'
echo VAR
echo $VAR
따라서 달러 기호는 기본적으로 콘텐츠를 평가합니다.
참고 URL : https://stackoverflow.com/questions/4128235/what-is-the-exact-meaning-of-ifs-n
'IT' 카테고리의 다른 글
Node.JS에서 서버 측 이미지 조작에 어떤 라이브러리를 가지고 있습니까? (0) | 2020.07.22 |
---|---|
기본 키가 아닌 외래 키 (0) | 2020.07.22 |
어떤 프로세스가 모든 디스크 IO를 사용하고 있습니까? (0) | 2020.07.22 |
리플렉션을 통해 사유 재산을 접근 할 수 있습니까? (0) | 2020.07.22 |
SLF4J / Logback에서 마커 사용에 대한 모범 사례 (0) | 2020.07.22 |