내 코드에는 다음 줄이 있습니다.
output=$(sed 's/\/$//g' <<< $output)
작동은 되지만 #!/bin/bash
작동이 되지 않습니다 #!/bin/sh
. sh
프로그램 종료 시 오류 라인을 분석한 결과, 이것이 문제가 되는 부분 Syntax error: redirection unexpected
이라는 결론에 도달했습니다 . <<<
또한 vim에서 vim은 아래 코드가 <<<
마치 문자열 안에 있는 것처럼 회색으로 표시합니다. 왜 이런 일이 발생하는지 알고 싶습니다. 미리 감사드립니다
답변1
예 <<<
, zsh 연산자는 이제 일부 다른 셸(ZSH 포함)에서 지원되지만 여전히 언어의 표준 사양 bash
에 추가되지 않았 으며 일부 구현에서는 여전히 이를 지원하지 않습니다.sh
sh
변수 내용에서 후행을 제거하려면 /
다음을 수행하십시오.
output=${output%/}
대신, 이 코드처럼 ¹ /
의 각 줄 끝에서 삭제 하려면 다음과 같이 하면 됩니다.$output
zsh
output=$(printf '%s\n' "$output" | sed 's|/$||')
또는 zsh의 here-string 대신 표준 here-doc를 사용하십시오.
output=$(
sed 's|/$||' << EOF
$output
EOF
)
지원되는 쉘은 <<<
다음과 같습니다:
zsh
, 1991년부터- 1991년 기준 Byron Rakitzis의
rc
Unix 클론(추가 개행 문자를 추가하지 않았음에도 불구하고) 및 파생 제품(es
,akanga
) ksh93
, 2002년부터bash
, 2002년부터mksh
, 2008년부터yash
, 2009년 이후( 호출 시 아님sh
)
sh
2020년 5월 현재 이를 지원하지 않는 구현에는 Bourne 쉘 ksh88
및 그 ash
파생물(busybox, FreeBSD, NetBSD dash
), OpenBSD가 포함됩니다.sh
pdksh
posh
sh
bosh
1 및 모든 후행 개행(추가된 개행 printf
및 있는 경우 의 개행 $output
)은 명령 대체의 부작용으로 결과에 포함됩니다. 예를 들어 (완벽하게 유효한 파일 경로) $output
라면 .$'///\n/\n/'
//