为什么某些命令可以通过变量运行,而其他命令则不能?

为什么某些命令可以通过变量运行,而其他命令则不能?

因此,如果我将一些简单的命令放入变量中,然后在行的开头调用该变量,它实际上会使用这些命令。例如:

yes@no:~$ nnn="ls -l Super"
yes@no:~$ $nnn
-rw-rw-rw- 1 yes yes 6 May 29 19:46 Super

但是,如果我尝试使用任何具有特殊字符的内容,或者尝试使用类似caseor 的内容if,则它不起作用:

yes@no:~$ nnn="ls -l|grep Super"
yes@no:~$ $nnn
ls: invalid option -- '\'
Try 'ls --help' for more information.

或者:

yes@no:~$ duper="if [[ ${ar} -eq 2 ]]; then echo yes; else echo no; fi"
yes@no:~$ "$duper"
if [[  -eq 2 ]]; then echo yes; else echo no; fi: command not found

显然,这里有一些更深层次的东西我不明白。

答案1

引号换行会转义特殊字符,因此它们被视为文字。为了引发您正在寻找的行为,您必须这样做

eval "$nnn"
eval "$duper"

相关内容