bash脚本根据最终参数对每个参数执行操作

Joh*_*nck 0 bash arguments shift

假设您要创建一个bash不支持任何选项但脚本不同的脚本cp,因为cp系统提供的脚本不接受多个源.

系统的用法(假设和破坏)cp是:

cp source target    # target may be a directory
Run Code Online (Sandbox Code Playgroud)

脚本的用法是:

cp.sh source... target    # target must be a directory
Run Code Online (Sandbox Code Playgroud)

这是脚本的起点:

#!/bin/bash
tgt="$1"
shift
for src in "$@"; do
    echo cp $src $tgt
done
Run Code Online (Sandbox Code Playgroud)

当使用参数" a b c d"(注意它d是目标)运行时,它输出:

cp b a
cp c a
cp d a
Run Code Online (Sandbox Code Playgroud)

目标是修复脚本以输出它,同时保持代码简单:

cp a d
cp b d
cp c d
Run Code Online (Sandbox Code Playgroud)

Lan*_*ing 5

/test.bash source1 source2 target1

#!/bin/bash

target=${!#} 

if [ ! -d $target ] ; then
    echo "$target must be a directory " >&2
    exit 1;
fi

args=("$@")
unset args[${#args[@]}-1]

for src in "${args[@]}"; do
    echo cp $src $target
done
Run Code Online (Sandbox Code Playgroud)

将输出

cp source1 target1
cp source2 target1
Run Code Online (Sandbox Code Playgroud)