다음 스크립트를 완료했습니다.
#! /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"