쉘 스크립트에서 echo(및 wc)를 사용하지 않고 새 줄을 인쇄하는 방법은 무엇입니까?

쉘 스크립트에서 echo(및 wc)를 사용하지 않고 새 줄을 인쇄하는 방법은 무엇입니까?

다음 스크립트를 완료했습니다.

#! /bin/sh  
path="foo" 
while touch $path ; do 
    path=./${path} 
done 

echo "echec avec le nom $path qui fait" 
echo $path|wc -c 
echo "caracteres"

같은 줄에 3개의 에코 줄을 인쇄하는 방법은 무엇입니까?

답변1

echo전혀 사용하지 않는 것이 훨씬 나을 것입니다. echo임의 입력과 함께 사용하면 예상치 못한 결과가 발생할 수 있습니다. 게다가 wc쉘 변수의 문자 수를 세지 않아도 됩니다. 쉘에서도 그렇게 할 수 있으며 시작하기 위해 별도의 프로세스를 실행할 필요가 없습니다.

예를 들어:

그리고 wc:

_path=/some/place/in/my/filesystem
printf %s "$_path" | wc -c

###OUTPUT###
28

아니요 wc:

printf %s "${#_path}"

###OUTPUT###
28

두 가지 printf인수:

printf 'Arg char count:\t%s\nArg contents:\t%s\n' \                                                                    
    "${#_path}" "$_path"

###OUTPUT###
Arg char count: 28
Arg contents:   /some/place/in/my/filesystem

당신의 명령:

printf 'echec avec le nom %s qui fait %s caracteres\n' \
    "$_path" "${#_path}"

###OUTPUT###
echec avec le nom /some/place/in/my/filesystem qui fait 28 caracteres

바라보다왜 printf가 echo보다 나은가요?및 사양POSIX 매개변수 확장더 많은 정보를 알고 싶습니다.

답변2

echoLinux 시스템 1 에서 개행을 억제하려면 다음을 사용하십시오 -n.

echo -n "echec avec le nom $path qui fait"

그러나 wc개행 문자도 인쇄되며 이는 억제할 수는 없지만 삭제할 수는 있습니다.

size=$(echo $path | wc -c);
echo "echec avec le nom $path qui fait $((size-1)) caracteres"

개행 출력이 에코를 통해 계산되기 $((size-1))때문에 여기서는 이것을 사용하고 있습니다 . wc대신 이를 사용할 수 있지만 size=$(echo -n $path | wc -c)비표준성에 대한 경고에 유의하세요 -n.


1. -nGNU coreutil의 echo 구현은 비표준이므로 YMMV입니다. 다행히 여기서는 실제로 사용할 필요가 없습니다.

답변3

옵션 -necho개행을 억제합니다. 따라서 다음과 같이 할 수 있습니다.

echo -n "echec avec le nom $path qui fait" 
echo -n $(echo $path|wc -c)
echo "caracteres"

관련 정보