%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%A7%80%20%EC%95%8A%EA%B3%A0%20%EC%83%88%20%EC%A4%84%EC%9D%84%20%EC%9D%B8%EC%87%84%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
다음 스크립트를 완료했습니다.
#! /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
echo
Linux 시스템 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. -n
GNU coreutil의 echo 구현은 비표준이므로 YMMV입니다. 다행히 여기서는 실제로 사용할 필요가 없습니다.
답변3
옵션 -n
은 echo
개행을 억제합니다. 따라서 다음과 같이 할 수 있습니다.
echo -n "echec avec le nom $path qui fait"
echo -n $(echo $path|wc -c)
echo "caracteres"