변수에서 일부 이름을 제외하고 싶습니다.
# echo $names
abba begiz altonzon music aolala
# echo $names | grep -o '[^[:space:]]\+'
abba
begiz
altonzon
music
aolala
egrep
다음을 사용하여 이 두 이름을 제외 하면
그런 다음 다음 예외가 발생합니다."shell-init: error retrieving current directory:"
# echo $names | grep -o '[^[:space:]]\+' | egrep -iv "abba|begiz"
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
altonzon
music
aolala
이 예외를 피하는 방법은 무엇입니까?
답변1
egrep
이는 일부 시스템, 적어도 데비안의 쉘에서는 삭제된 디렉토리에서 시작하는 것을 좋아하지 않는 쉘 스크립트입니다.
$ mkdir /tmp/z
$ cd /tmp/z
$ rm -r /tmp/z
$ egrep
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
이것이 Bash as /bin/sh
Dash가 제공하는 것입니다.sh: 0: getcwd() failed: No such file or directory
grep -E
쉘 스크립트 실행을 우회하거나 삭제된 디렉토리에서 실행하지 않으려면 직접 사용하십시오 .
완전히 다른 점은 현재 수행 중인 작업을 수행하는 데 다음과 같은 문제가 발생하지 않는 더 나은 방법이 있을 수 있다는 것입니다.분사그리고 와일드카드.
Bash에서는 배열을 사용할 수 있습니다.
names=(abba begiz altonzon music aolala)
newnames=()
for x in "${names[@]}"; do
if [[ ! $x =~ ^(abba|begiz)$ ]]; then
newnames+=("$x")
fi
done
# do something with newnames