在我的bash脚本中,我想解析零个、一个或两个参数(脚本能够识别它们),然后将其余的参数转发给在脚本中调用的命令。我该怎么做?
Bash支持参数子集(请参见子集和子字符串),因此您可以像这样选择要处理/传递的参数。
打开新文件并进行编辑: vim r.sh
:
echo "params only 2 : ${@:2:1}"
echo "params 2 and 3 : ${@:2:2}"
echo "params all from 2: ${@:2:99}"
echo "params all from 2: ${@:2}"
运行它:
$ chmod u+x r.sh
$ ./r.sh 1 2 3 4 5 6 7 8 9 10
结果为:
params only 2 : 2
params 2 and 3 : 2 3
params all from 2: 2 3 4 5 6 7 8 9 10
params all from 2: 2 3 4 5 6 7 8 9 10
bash 使用 shift 命令:
例如: shifttest.sh:
#!/bin/bash
echo $1
shift
echo $1 $2
运行shifttest.sh 1 2 3 的输出结果为
1
2 3
"$1"
的情况下将其作为$1
转发,那么shell将执行单词分割,因此例如foo bar
将被分别转发为foo
和bar
。 - Tamás Zahola
$@
将数组的每个元素都视为引号括起来的字符串,不会被展开。它还确保将每个元素视为一个单独的词语。这段说明以及演示差异的测试脚本可以在此链接中找到:http://tldp.org/LDP/abs/html/internalvariables.html#APPREF - Cascabel"$@"
不像 C 语言系列中的sys.argv[0]
一样将脚本/命令名称本身作为参数传递。换句话说,你可以放心地调用任何命令,如cmd_inside_script "$@"
。 - axolotl