![bash 在运行之前重新处理字符串](https://linux22.com/image/161283/bash%20%E5%9C%A8%E8%BF%90%E8%A1%8C%E4%B9%8B%E5%89%8D%E9%87%8D%E6%96%B0%E5%A4%84%E7%90%86%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
考虑hello world
当前目录中有一个名为的目录。是的,该目录中有一个空格。举例来说,假设它有一个名为 f1.txt 的文件。
ls 'hello world'
将打印
f1.txt
但
a="ls 'hello world'"
$a
说
ls: cannot access ''\''hello': No such file or directory
ls: cannot access 'world'\''': No such file or directory
所以问题是如何让 ls 列出目录hello world
。基本上如何做到这一点
a="1 2"
b="ls $a"
$b
实际列出文件夹的内容hello world
PS:我不想做
a="1 2"
ls $a
我想存储它然后才运行它
答案1
francois@zaphod:~$ mkdir "hello world"
francois@zaphod:~$ touch "hello world"/{a,b,c}
francois@zaphod:~$ a="ls 'hello world'"
francois@zaphod:~$ eval "$a"
a b c
francois@zaphod:~$
eval 您的变量将执行该变量作为您需要运行的命令的文本