개행은 변수에 있습니다. LS=$(ls -1)변수 LS를 출력으로 설정합니다 ls -1( ls출력이 터미널로 갈 때를 제외하고 와 동일한 출력을 생성합니다 ). 마지막 줄 바꿈.
문제는 값을 인쇄 할 때 줄 바꿈을 제거한다는 것입니다. 쉘 스크립트에서 $LS"변수의 값"을 의미하는 것이 아니라 "의 값을 LS취하여 LS이를 IFS단어로 나누고 각 단어를 글로브 패턴으로 해석"을 의미합니다. 의 값을 얻으려면 LS을 쓰거나 "$LS"더 일반적으로 $LS큰 따옴표 를 넣으 십시오.
echo "$LS"의 값을 출력 LS백 슬래시 문자를 해석하고,로 시작하는 몇 가지 값을 제외하고 어떤 조개를 제외하고 -.
printf "$LS"LS퍼센트 나 백 슬래시 문자를 포함하지 않고 (대부분의 구현에서)로 시작하지 않는 한 값을 인쇄합니다 -.
값을 LS정확하게 인쇄하려면을 사용하십시오 printf %s "$LS". 끝에 줄 바꿈을 원하면을 사용하십시오 printf '%s\n' "$LS".
참고 $(ls)일반적으로하지 않습니다, 현재 디렉토리에있는 파일의 목록입니다. 파일 이름을 충분히 길들인 경우에만 작동합니다. 파일 이름 목록 (점 파일 제외)을 가져 오려면 와일드 카드를 사용해야합니다 *. 결과는 문자열이 아닌 문자열 목록이므로 문자열 변수에 할당 할 수 없습니다. files=(*)쉘을 지원하는 쉘에서 배열 변수 를 사용할 수 있습니다 (ksh93, bash, zsh).
자세한 내용 은 쉘 스크립트가 공백 또는 기타 특수 문자에서 질식하는 이유는 무엇입니까?를 참조하십시오 .
printf "%s\n" $LS하십시오.