다른 파일을 찾아서 끌어 오기 위해 bash 스크립트를 작성하려고합니다. 지금까지, 나는 다음과 같은 스크립트를 내놓았다 :대시 (non-dash) 관련 잘못된 대체 오류
find ./to_compress -type f -iname "*.tar" -mindepth 1 -maxdepth 1 -exec mv {} ./compressed/${{}##*/}
bash는이 ${{}##*/}
나쁜 교체는 불평하지만
bash: ./compressed/${{}##*/}: bad substitution
주위가 간부로 인해 수 있다고 제안 인터넷 검색을 일부 bash
대신 dash
을 호출했습니다. 그 이유는 다음과 같습니다.
find ./to_compress -type f -iname "*.tar" -mindepth 1 -maxdepth 1 -exec echo $0 {} \;
bin/bash xxxx
으로 응답하여 bash가 실제로 exec 명령에 의해 호출되었음을 암시합니다.
이 오류의 원인은 무엇입니까? 파일 이름 만 얻고 후행하는 디렉토리를 지우려면 어떻게해야합니까?
그래는 잘 작동합니다. 고마워요. 자바와 파이썬에 대한 경험이 있었음에도 불구하고 저는 여전히 배쉬를 처음 접했습니다. '$ 1'은 파일 이름의 공백에 안전합니까? – chiffa
@chiffa'{}'를 서브 쉘에 전달하는 것이 안전하며'$ 1'은 안전을 유지하기 위해 큰 따옴표로 묶어야합니다 (필자가 작성한대로) – janos
과'$ {1 # # * /}'? – chiffa