A atribuição de variáveis na sintaxe da shell não pode ter espaços.
last_char = ...
é um comando chamado last_char
com os argumentos =
e ....
. last_char=...
é uma atribuição que armazena ...
na variável do shell last_char
.
Esta é uma maneira muito mais eficiente e direta de fazer o que você quer:
case $2 in
*/) ap_src_path=$2;;
*) ap_src_path=$2/;;
esac
case $3 in
*/) ap_dest_path=$3;;
*) ap_dest_path=$3/;;
esac
Você não precisa extrair o último caractere para fazer uma comparação simples. Além disso, a substituição de comando é ineficiente e desajeitada para manipulação de variáveis de shell simples como essa.
Mais importante, você não precisa fazer nada disso. Na maior parte, a resolução do caminho Unix não se preocupa com as barras duplicadas barras duplicadas , por isso path///to//a/file
é tão válido quanto %código%. Em scripts, você pode aproveitar isso simplesmente não se preocupando com path/to/a/file
duplicado. Em outras palavras, você pode substituir o script inteiro por
if [ $# -ne 3 ]; then
# ... same as above ...
fi
pattern=$1
ap_src_path=$2
ap_dst_path=$3
cat "$ap_src_path/$pattern"* > "$ap_dest_path/compn.dat"