我知道如果我有一个命令./run -c -p '$' -s 10 file.txt
我可以写这样的bash脚本
while read line; do
# ...
done < $6
但是如果命令可能有也可能没有一个/一些选项,可能像这样
./run -p '$' -s 10 file.txt
或this
./run '$' -s 10 file.txt
那么我如何在脚本中获得文件名?
如果文件名总是出现在参数列表的末尾,则可以使用"${@: -1}"
选择最后一个参数。摘自:https://stackoverflow.com/a/1854031/3565972
如:
while read line; do
...
done < "${@: -1}"
使用getopts
处理选项(也允许它们以任意顺序排列):
#!/usr/bin/env bash
while getopts cp:s: option; do
case $option in
c)
echo "-c used"
;;
p)
echo "-p used with argument $OPTARG"
;;
s)
echo "-s used with argument $OPTARG"
;;
*)
echo "unknown option used"
exit 1
;;
esac
done
shift $(( OPTIND - 1 ));
echo "Arguments left after options processing: $@"
现在如果你运行这个:
$ ./test.sh -c -p '$' -s 10 file.txt
-c used
-p used with argument $
-s used with argument 10
Arguments left after options processing: file.txt
如果您想在脚本中获得文件名。然后,您可以使用$#来获得参数的总数。所以你可以这样写:
eval filename=$$#
如果您只是想从这样的行中获取文件名:./运行** ** ** ** file.txt
你可以像这样使用awk:
line="./run ** ** ** ** file.txt"
echo $line | awk '{print $NF}'
祝你好运!