KeShAw Asked: 2025-01-11 01:25:09 +0800 CST2025-01-11 01:25:09 +0800 CST 2025-01-11 01:25:09 +0800 CST 不同的“美元”![重复] 772 使用命令时echo $100,我得到了输出 00,而如果我给出echo $d00命令,它会给出一个空行!为什么?bash 内部是否有方法可以对两者进行不同的解释? bash 2 个回答 Voted Best Answer Chris Davies 2025-01-11T01:39:38+08:002025-01-11T01:39:38+08:00 您正在对比两个命令 echo $100输出00 这是因为在您的 shell 中(但不一定是所有 shell 中)变量$1是保留的(其他从$2-开始的单个数字编号的变量也是如此$9)。shell 将字符串解析$100为$1文字后跟的字符串00。变量$1不包含任何内容,因此仅00输出。 您不能直接分配给编号变量,因为它们代表传递给命令的参数。但是,如果为了讨论的目的,我们将 更改为 ,$100我们$10可以在这里看到一个例子,其中$10被视为$1(第一个参数)和0,但${10}被视为第 10 个参数: ( set -- a b c d e f g h i j k l m; echo "$10" ) # → "a0" ( set -- a b c d e f g h i j k l m; echo "${10}" ) # → "j" echo $d00给出一个空行 shell 看到非数字变量$d00并将其扩展为其值。您没有定义值,所以它什么也不是。结果echo命令(没有参数)输出一个空白行。 您可以定义变量,然后再次测试: d00=apple echo $d00 # → "apple" davolfman 2025-01-11T01:40:46+08:002025-01-11T01:40:46+08:00 这是 bash 继承的旧 Bourne shell 特性:只有 $0-$9 可以不带括号使用。请使用 ${100}。
您正在对比两个命令
echo $100
输出00
这是因为在您的 shell 中(但不一定是所有 shell 中)变量
$1
是保留的(其他从$2
-开始的单个数字编号的变量也是如此$9
)。shell 将字符串解析$100
为$1
文字后跟的字符串00
。变量$1
不包含任何内容,因此仅00
输出。您不能直接分配给编号变量,因为它们代表传递给命令的参数。但是,如果为了讨论的目的,我们将 更改为 ,
$100
我们$10
可以在这里看到一个例子,其中$10
被视为$1
(第一个参数)和0
,但${10}
被视为第 10 个参数:echo $d00
给出一个空行shell 看到非数字变量
$d00
并将其扩展为其值。您没有定义值,所以它什么也不是。结果echo
命令(没有参数)输出一个空白行。您可以定义变量,然后再次测试:
这是 bash 继承的旧 Bourne shell 特性:只有 $0-$9 可以不带括号使用。请使用 ${100}。