相关疑难解决方法(0)

$* 和 $@ 有什么区别?

考虑以下代码:

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变量,但它不会修改输出。也许我做错了什么?

shell ksh quoting arguments

119
推荐指数
6
解决办法
4万
查看次数

我们如何运行存储在变量中的命令?

$ ls -l /tmp/test/my\ dir/
total 0
Run Code Online (Sandbox Code Playgroud)

我想知道为什么以下运行上述命令的方法失败或成功?

$ abc='ls -l "/tmp/test/my dir"'

$ $abc
ls: cannot access '"/tmp/test/my': No such file or directory
ls: cannot access 'dir"': No such file or directory

$ "$abc"
bash: ls -l "/tmp/test/my dir": No such file or directory

$ bash -c $abc
'my dir'

$ bash -c "$abc"
total 0

$ eval $abc
total 0

$ eval "$abc"
total 0
Run Code Online (Sandbox Code Playgroud)

shell bash quoting variable

104
推荐指数
2
解决办法
13万
查看次数

标签 统计

quoting ×2

shell ×2

arguments ×1

bash ×1

ksh ×1

variable ×1