我正在阅读有关 Unix 中的位置参数的内容,然后我发现了以下信息:
shell 允许命令行包含至少 128 个参数;然而,shell 程序在给定时间仅限于引用 9 个位置参数,即 $1 到 $9。您可以使用 Shift 命令来解决此限制。
所以我创建了一个简单的 shell 脚本,file
如下所示:
#! /bin/bash
echo $14
然后像下面这样运行它:
./file 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
我得到了 14 个!
shift
那么,如果 shell 在不使用命令的情况下不允许超过 10 个参数(从 $0 到 $9),这怎么可能呢?
答案1
当你跑步时
echo $14
发生的情况是 bash 将参数解释$14
为$1
和4
分开。然后它会展开$1
(在本例中等于“1”),然后将字符串附加4
到其中,结果是“14”。尽管这是您所期望的结果,但这实际上是 Bash 实际行为的副作用。就像评论中提到的 @steeldriver 一样,像这样运行脚本:
./file a b c d e f g h i j k l m n
然后调用echo $14
不会输出“n”而是“a4”。
请注意,将变量用双引号引起来:
echo "$14"
在 Bash 中仍然无法正确扩展变量。标准方法是在变量名称周围使用花括号:
echo ${14}
更多信息请参见官方文档参数扩展在巴什中。它还可以做很多更酷的事情,比如
${14^^*}
将第 14 号参数大写。读一读! :)