각 매개 변수에서 후행 슬래시를 제거하는 가장 간단한 방법은 무엇입니까?
$@' 배열의 각 매개 변수에서 후행 슬래시를 제거하는 가장 간단한 방법은 무엇입니까?rsync
이름별로 디렉토리를 복사하시겠습니까?
rsync -a --exclude='*~' "$@" "$dir"
명확한 설명을 위해 제목이 변경되었습니다.여러 후행 슬래시에 대한 설명과 답변을 이해하려면 편집 기록을 참조하십시오.
사용할 수 있습니다.${parameter%word}
여기에 자세히 설명된 확장.다음은 동작을 보여주는 간단한 테스트 스크립트입니다.
#!/bin/bash
# Call this as:
# ./test.sh one/ two/ three/
#
# Output:
# one two three
echo ${@%/}
승인된 답변은 후행 슬래시 하나를 자릅니다.
여러 후행 슬래시를 트리밍하는 한 가지 방법은 다음과 같습니다.
VALUE=/looks/like/a/path///
TRIMMED=$(echo "$VALUE" | sed 's:/*$::')
echo "$VALUE" "$TRIMMED"
출력 대상:
/looks/like/a/path/// /looks/like/a/path
이것은 나에게 도움이 됩니다.${VAR%%+(/)}
여기에 설명된 바와 같이 http://wiki.bash-hackers.org/syntax/pattern
셸 옵션 extglob을 설정해야 할 수 있습니다.활성화되어 있는지 확인할 수 없지만 여전히 작동합니다.
realpath
지정된 경로를 확인합니다.무엇보다도 후행 슬래시를 제거합니다.사용하다-s
다음 심링크를 방지하기 위해
DIR=/tmp/a///
echo $(realpath -s $DIR)
# output: /tmp/a
참고로, 나는 이 두 가지 기능을 내 컴퓨터에 추가했습니다..bash_profile
SO에서 발견된 답변을 기반으로 합니다.Chris Johnson이 말했듯이, 모든 대답은 다음을 사용합니다.${x%/}
슬래시를 하나만 제거하면 이 함수들은 그들이 말하는 것을 할 것입니다. 이것이 유용하기를 바랍니다.
rem_trailing_slash() {
echo "$1" | sed 's/\/*$//g'
}
force_trailing_slash() {
echo "$(rem_trailing_slash "$1")/"
}
zsh에서 다음을 사용할 수 있습니다.:a
수식어
export DIRECTORY='/some//path/name//'
echo "${DIRECTORY:a}"
=> /some/path/name
이런 식으로.realpath
그러나 누락된 파일/디렉토리를 인수로 지정하면 실패하지 않습니다.
디렉토리 인수를 트리밍할 때 사용한 접근법입니다.rsync
사용하여 여기를 이용하여dirname
그리고.basename
경로를 분할하고 후행 슬래시 없이 부품을 재결합합니다.
raw_dir=/a/b/c/
trim_dir=$(dirname "$raw_dir")"/"$(basename "$raw_dir")
승인된 답변에 대한 몇 가지 의견을 기록합니다.
- 반복되는 모든 슬래시 교체
//[...]
단칼에/
(@Dave 설명에 따라) - 선행 슬래시(즉, 루트 파일 경로)가 아닌 경우 후행 슬래시 제거
/
) (@Gordon Davisson 설명에 따라)
trimSlash() { for s; do sed -E 's://*:/:g; s:(^/)?/*$:\1:' <<< "${s}"; done; }
파라미터 대체를 사용한 답변만큼 간결하지는 않지만, 저는 부지런히 노력할 가치가 있다고 생각합니다.
일부 테스트 사례:
$ trimSlash "/" "///" "a/" "a/a/" "a///a/" "a/a" "a///a" "a///" "/a/a/" "///a///"
/
/
a
a/a
a/a
a/a
a/a
a
/a/a
/a
가장 아름다운 방법은 아니지만, 빠르고 쉬운 방법입니다.
저는 슬래시를 추가하고 모든 더블을 제거합니다.이러한 패턴은 다른 곳에서는 발견되지 않을 것이라고 가정합니다.
WORD="abc/"
WORD=$WORD'/'
WORD=`echo $WORD | sed s/'\/\/'/''/g`
echo $WORD
언급URL : https://stackoverflow.com/questions/9018723/what-is-the-simplest-way-to-remove-a-trailing-slash-from-each-parameter
'itsource' 카테고리의 다른 글
Git 버전 관리를 사용하여 파일 변경 내역 보기 (0) | 2023.05.12 |
---|---|
스크립트 자체 내에서 전체 셸 스크립트의 출력을 리디렉션하는 방법은 무엇입니까? (0) | 2023.05.12 |
종속 DLL이 Visual Studio의 빌드 출력 폴더에 복사되지 않습니다. (0) | 2023.05.12 |
파이썬 데이터 클래스를 해시 가능하게 만들려면 어떻게 해야 합니까? (0) | 2023.05.12 |
Azure 가상 시스템과 클라우드 서비스의 차이점은 무엇입니까? (0) | 2023.05.12 |