bash로 작성된 모든 파일을 가져오고 싶기 때문에 이 명령을 사용하면 IFBASH=$(grep -Fx #!/bin/bash *)
작동합니다.
산출:test.sh:#!/bin/bash t test2.sh:#!/bin/bash
이 모든 내용은 $IFBASH 변수에 저장됩니다. 이제 삭제하고 싶어서 :#!/bin/bash
사용했습니다.LIST=$(echo "$IFBASH" | tr -d ':#!/bin/bash')
산출:
tet.h
tet2.h
이것은 확실히 내가 원하는 것이 아닙니다. 누군가 나에게 실제로 작동하는 명령을 줄 수 있습니까?
답변1
실패한 이유 tr
는캐릭터 목록문자열이 아닌 입력으로. 로 변경될 것이기 때문에 인쇄 echo abc | tr 'bca' 'def'
할 것입니다 . 로 변경 . 로 변경 .fde
b
f
c
d
a
e
grep
원하지 않는 부분을 포함하지 않도록 지시하거나(Linux에서 해당 옵션을 지원하는 경우 ) 다음과 같이 문자열을 대체할 수 있는 도구를 사용하여 grep
원하는 작업을 수행 할 수 있습니다 .-l
sed
GNU 사용
grep
ifbash=$(grep -lx '#!/bin/bash' *)
문자열을 대체할 수 있는 다른 도구를 사용하세요
sed
.perl
ifbash=$(grep -x '#!/bin/bash' * | sed 's|#!/bin/bash||')
또는
ifbash=$(grep -x '#!/bin/bash' * | perl -pe 's|#!/bin/bash||')
여기서는 해당 옵션이 필요하지 않기 때문에 제거하고 로 -F
변경했습니다 . 일반적으로 전역 환경 변수는 관례적으로 모두 대문자이므로 쉘 스크립트에서 대문자 변수 이름을 사용하지 않는 것이 가장 좋습니다. 폭이 넓어 예상치 못한 동작이 발생할 수 있습니다.IFBASH
ifbash