입력으로 사용되는 bash 스크립트에 간결하고 읽기 쉬운 함수가 필요합니다.
- 절대 경로(예: /home/user/tmp/data/sample1.txt)
- 새 파일 이름(예:extend_sample.dat)
그리고 돌아오다
새 파일 이름이 있는 절대 경로(예: /home/user/tmp/data/extended_sample.dat)
미리 감사드립니다!
답변1
경로 이름 작업을 쉽게 해주는 2+1(추가) 명령이 있습니다:
- basename - 파일 이름에서 디렉토리와 접미사를 제거합니다.
dirname - 파일 이름에서 마지막 부분을 제거합니다.
readlink - 해결된 기호 링크 또는 정식 파일 이름을 인쇄합니다.
따라서 귀하의 질문에 대답하려면 다음을 수행하십시오.
old_path=/home/user/tmp/data/sample1.txt
new_file=extended_sample.dat
new_path="$(dirname $old_path)/$new_file"
또는 원본 파일의 경로 이름을 변경하십시오.
alt_path=/mnt/newroot/foo
new_path="$alt_path/$(basename $old_path)"
실행 중인 스크립트의 전체 위치를 추출합니다(스크립트가 자체 파일에서 실행되는 경우 작동함).
dirname $(readlink -f ${0})
이 3가지 명령을 사용하면 대부분의 경로 작업을 쉽게 완료할 수 있습니다.
답변2
return
성명서에 참고하세요세게 때리다숫자 값을 상태 코드로 반환하는 데 사용되는 함수입니다.
가장 간단한 경우의 모습은 다음과 같습니다.
#!/bin/bash
path="/home/user/tmp/data/sample1.txt"
new_name="extended_sample.dat"
function get_new_path() { echo "${1%/*}/$2"; }
new_path=$(get_new_path "$path" "$new_name")
echo "$new_path"
위의 내용은 다음과 같이 출력됩니다.
/home/user/tmp/data/extended_sample.dat
답변3
그냥 nameref를 가지고 놀아보세요 bash
:
path_replace_file () {
local -n pathvar="$1"
pathvar="${pathvar%/*}/$2"
}
pathname="/home/user/tmp/data/sample1.txt"
printf 'pathname before = %s\n' "$pathname"
path_replace_file pathname extended_sample.dat
printf 'pathname after = %s\n' "$pathname"
산출:
pathname before = /home/user/tmp/data/sample1.txt
pathname after = /home/user/tmp/data/extended_sample.dat
이 path_replace_file
기능에는변수 이름첫 번째 매개변수로. 함수 내에서 pathvar
해당 변수에 대한 별칭(이름 참조)처럼 작동합니다.
이 함수는 값의 파일 이름 부분을 $pathval
함수의 두 번째 인수로 제공된 값으로 바꿉니다.
이를 위해서는 bash
버전 4.3 이상이 필요합니다.
local -n
로 변경하면 typeset -n
작동하게 됩니다 ksh93
.