考虑以下代码:
foo () {
echo $*
}
bar () {
echo $@
}
foo 1 2 3 4
bar 1 2 3 4
Run Code Online (Sandbox Code Playgroud)
它输出:
1 2 3 4
1 2 3 4
我正在使用 Ksh88,但我也对其他常见的 shell 感兴趣。如果您碰巧知道特定 shell 的任何特殊性,请务必提及它们。
我在 Solaris 上的 Ksh 手册页中找到了以下内容:
$* 和 $@ 的含义在不引用或用作参数赋值或文件名时是相同的。然而,当用作命令参数时,$* 等价于 ``$1d$2d...'',其中 d 是 IFS 变量的第一个字符,而 $@ 等价于 $1 $2 ....
我尝试修改IFS变量,但它不会修改输出。也许我做错了什么?
有时添加真的很方便
set -x
Run Code Online (Sandbox Code Playgroud)
到脚本顶部以在执行之前显示所有命令。
创建具有体面输出的脚本只有一个缺点:我不知道如何以这种方式将文本输出添加到脚本中。如果我使用
echo 'some comment'
Run Code Online (Sandbox Code Playgroud)
它会导致打印结果翻倍:
+ echo 'some comment'
some comment
Run Code Online (Sandbox Code Playgroud)
如果我使用#它根本不显示。
如何添加打印出来的注释echo?如果我使用set -x?