为什么 $($var) 给出错误?

为什么 $($var) 给出错误?

我正在尝试在 shell 中执行以下代码,但没有得到预期的输出。命令如下:

i=1
echo $($i)

我收到错误:

Command not found error

我认为它应该显示第一个命令行参数的值,而不是给出错误。

答案1

因为该构造$(...)是一个命令替换,所以$($i)意味着运行变量 的内容$i。在您的情况下,它将尝试执行1shell 无法找到的命令。

请参阅下面的内容,它是如何失败的,但如果我们创建一个名为“1”的脚本,它就会起作用。

例子:

$ i=1
$ echo "$($i)"
-bash: 1: command not found  
$ cat >1
#!/bin/bash
echo Hello World
$ chmod 755 1
$ PATH=$PATH:`pwd`
$ echo "$($i)"
Hello World
$

要显示第一个命令行参数的值,您需要$1${1}

$ cat >mytest
#!/bin/bash
echo "arg 1 is $1"
echo "arg 1 is ${1}"
$ chmod 755 mytest
$ ./mytest foo
arg 1 is foo
arg 1 is foo
$

相关内容