一部のコマンドは変数を介して実行でき、他のコマンドは実行されません。 [コピー]

一部のコマンドは変数を介して実行でき、他のコマンドは実行されません。 [コピー]

したがって、いくつかの簡単なコマンドを変数に入れてから、行の先頭でその変数を呼び出すと、実際にそのコマンドが使用されます。たとえば、

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

caseただし、特殊文字を含むアイテムを使用しようとしたり、同じアイテムを使用しようとすると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"

関連情報