我正在尝试在 shell 中执行以下代码,但没有得到预期的输出。命令如下:
i=1
echo $($i)
我收到错误:
Command not found error
我认为它应该显示第一个命令行参数的值,而不是给出错误。
答案1
因为该构造$(...)
是一个命令替换,所以$($i)
意味着运行变量 的内容$i
。在您的情况下,它将尝试执行1
shell 无法找到的命令。
请参阅下面的内容,它是如何失败的,但如果我们创建一个名为“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
$