我知道我是否有命令./run -c -p '$' -s 10 file.txt
我可以像这样编写bash脚本
while read line; do
# ...
done < $6
但是,如果命令可能有也可能没有一个/一些选项,可能看起来像这样
./run -p '$' -s 10 file.txt
或者
./run '$' -s 10 file.txt
然后我如何在脚本中获取文件名?
答案 0 :(得分:3)
如果文件名始终位于参数列表的末尾,则可以使用"${@: -1}"
选择最后一个参数。取自:https://stackoverflow.com/a/1854031/3565972
例如:
while read line; do
...
done < "${@: -1}"
答案 1 :(得分:3)
使用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
答案 2 :(得分:0)
如果您想在脚本中获取文件名./run。然后你可以使用$#来获取参数的总和。 所以你可以写如下:
eval filename=\$$#
如果您只想从以下行获取文件名:./ run ** ** ** ** file.txt
你可以使用如下的awk:
line="./run ** ** ** ** file.txt"
echo $line | awk '{print $NF}'
祝你好运!