如何在shell脚本中获取最后一个参数并在最后一个参数之前停止?
我想把所有文件合并成一个文件。这里,最后一个参数是目标文件名。 我想取最后一个参数,然后在最后一个参数之前循环停止 这里给出了我想要实现的代码:如何在shell脚本中获取最后一个参数并在最后一个参数之前停止?,shell,unix,sh,csh,subshell,Shell,Unix,Sh,Csh,Subshell,我想把所有文件合并成一个文件。这里,最后一个参数是目标文件名。 我想取最后一个参数,然后在最后一个参数之前循环停止 这里给出了我想要实现的代码: echo "No. of Argument : $#" for i in $* - 1 do echo $i cat $i >> last argument(file) done 如何实现这一点?使用bash: 在bash中,脚本的最后一个参数是${!}。这就是我们得到文件名的地方 bash还允许从数组中选择元素。要从一个简单
echo "No. of Argument : $#"
for i in $* - 1
do
echo $i
cat $i >> last argument(file)
done
如何实现这一点?使用bash:
在bash中,脚本的最后一个参数是${!}。这就是我们得到文件名的地方
bash还允许从数组中选择元素。要从一个简单的示例开始,请注意:
$ set -- a b c d e f
$ echo "${@}"
a b c d e f
$ echo "${@:2:4}"
b c d e
在本例中,我们希望从第一个元素到第二个元素再到最后一个元素进行选择。第一个是1号。最后一个是$。我们要选择除最后一个之外的所有。因此,我们需要数组中的$-1个元素。因此,要从第一个参数到第二个参数再到最后一个参数,我们使用:
${@:1:$# - 1}
使用bash:
在bash中,脚本的最后一个参数是${!}。这就是我们得到文件名的地方
bash还允许从数组中选择元素。要从一个简单的示例开始,请注意:
$ set -- a b c d e f
$ echo "${@}"
a b c d e f
$ echo "${@:2:4}"
b c d e
在本例中,我们希望从第一个元素到第二个元素再到最后一个元素进行选择。第一个是1号。最后一个是$。我们要选择除最后一个之外的所有。因此,我们需要数组中的$-1个元素。因此,要从第一个参数到第二个参数再到最后一个参数,我们使用:
${@:1:$# - 1}
符合POSIX的方法:
eval last_arg=\$$#
while [ $# -ne 1 ]; do
echo "$1"
cat "$1" >> "$last_arg"
shift
done
在这里,eval是安全的,因为您只是在eval将执行的字符串中扩展一个只读参数。如果不想通过shift取消设置位置参数,可以迭代它们,使用计数器提前中断循环
eval last_arg=\$$#
i=1
for arg in "$@"; do
echo "$arg"
cat "$arg" >> "$last_arg"
i=$((i+1))
if [ "$i" = "$#" ]; then
break
fi
done
符合POSIX的方法:
eval last_arg=\$$#
while [ $# -ne 1 ]; do
echo "$1"
cat "$1" >> "$last_arg"
shift
done
在这里,eval是安全的,因为您只是在eval将执行的字符串中扩展一个只读参数。如果不想通过shift取消设置位置参数,可以迭代它们,使用计数器提前中断循环
eval last_arg=\$$#
i=1
for arg in "$@"; do
echo "$arg"
cat "$arg" >> "$last_arg"
i=$((i+1))
if [ "$i" = "$#" ]; then
break
fi
done
请注意,如果先列出目标文件,然后再列出源文件,则会容易得多。你有:目标=1美元;转移cat$@>$target,它将不依赖于Bash。GNU命令和已修改为支持选项-t destination来指定目标目录,这与我的建议类似。。。感谢您,如果先列出目标文件,然后再列出源文件,会容易得多。你有:目标=1美元;转移cat$@>$target,它将不依赖于Bash。GNU命令和已修改为支持选项-t destination来指定目标目录,这与我的建议类似。。。谢谢