$和$*都表示所有位置参数但它们有一个关键区别$把每个参数当作独立的个体各自为政$*把全部参数当成一个整体打包处理。变量行为什么时候用$每个参数独立保持空格和引号推荐大多数场景$*所有参数合并成一个字符串需要把所有参数当整体时二、示例脚本#!/bin/bash # test.sh echo 测试 \$ for arg in $; do echo 参数: $arg done echo echo 测试 \$* for arg in $*; do echo 参数: $arg done运行脚本./test.sh a b c输出 测试 $ 参数: a 参数: b 参数: c 测试 $* 参数: a b c$每个参数单独一行$*所有参数合并成一个但没有引号时差异更明显带空格和引号的参数./test.sh hello world foo bar输出 测试 $ 参数: hello world 参数: foo bar 测试 $* 参数: hello world foo bar$保持了每个参数的引号hello world作为一个整体$*把所有东西合并成一个字符串区别的本质变量存储方式相当于$[hello world, foo bar]每个参数独立像列表$*[hello world foo bar]全部拼成一个字符串像单个元素$是一组$*是一坨。大多数情况下用$就可以了。