Приведенный ниже служебный скрипт выполняет все виды тарирования для клиентских скриптов. Он многократно выполняет преобразование абсолютного в относительный путь, поэтому я извлек это в отдельную функцию (_convertToRelative
).
#!/bin/bash
_convertToRelative() {
local -n arr1=$1
local arr2=( "${arr1[@]/#\//}" ) # ( /foo/bar /foo/baz ) -> ( foo/bar foo/baz )
echo $arr2
}
tarPaths() {
local -n paths_absolute=$1
local paths_relative=${_convertToRelative paths_absolute} # fails here
# ...run tar
}
Клиентский скрипт сделает это
paths=( '/foo/bar/baz/a' '/foo/bar/baz/b' '/foo/bar/baz/c' )
tarPaths paths
Но происходит сбой с:
paths_relative = $ {_ convertToRelative paths_absolute}: неправильная замена