因此,如果我将一些简单的命令放入变量中,然后在行的开头调用该变量,它实际上会使用这些命令。例如:
yes@no:~$ nnn="ls -l Super"
yes@no:~$ $nnn
-rw-rw-rw- 1 yes yes 6 May 29 19:46 Super
但是,如果我尝试使用任何具有特殊字符的内容,或者尝试使用类似case
or 的内容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"