![一部のコマンドは変数を介して実行でき、他のコマンドは実行されません。 [コピー]](https://linux33.com/image/163487/%E4%B8%80%E9%83%A8%E3%81%AE%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AF%E5%A4%89%E6%95%B0%E3%82%92%E4%BB%8B%E3%81%97%E3%81%A6%E5%AE%9F%E8%A1%8C%E3%81%A7%E3%81%8D%E3%80%81%E4%BB%96%E3%81%AE%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AF%E5%AE%9F%E8%A1%8C%E3%81%95%E3%82%8C%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
したがって、いくつかの簡単なコマンドを変数に入れてから、行の先頭でその変数を呼び出すと、実際にそのコマンドが使用されます。たとえば、
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"