我正在编写一个简单的脚本来生成给定长度(比如 10)的 a 和 b 的所有组合。我希望能够在命令行上执行此操作(我知道如果我将所有内容都放在 bash 脚本文件中并执行它,这将相当容易)。但是,我想知道是否可以不使用任何额外文件。这是我到目前为止所拥有的:
n=10;
for i in `seq 1 1 $n`; do
echo "for a$i in {a..b}; do ";
done;
echo -n "echo ";
for i in `seq 1 1 $n`; do
echo -n '$'"a$i"; done;
echo;
for i in `seq 1 1 $n`; do
echo "done;";
done
(为了便于阅读,我对代码进行了格式化,但实际上它们都在一行中从提示符运行)
这给了我以下输出:
for a1 in {a..b}; do
for a2 in {a..b}; do
for a3 in {a..b}; do
for a4 in {a..b}; do
for a5 in {a..b}; do
for a6 in {a..b}; do
for a7 in {a..b}; do
for a8 in {a..b}; do
for a9 in {a..b}; do
for a10 in {a..b}; do
echo $a1$a2$a3$a4$a5$a6$a7$a8$a9$a10
done;
done;
done;
done;
done;
done;
done;
done;
done;
done;
这很好。如果我复制它并将其粘贴回命令行,它会非常有效并为我提供结果。
问题是我如何只使用初始脚本来执行此操作,而无需复制粘贴,也无需将任何内容重定向到文件。
我试过在脚本周围添加 $( ),但这给了我“没有找到‘for’命令”,因为它不是真正的命令,而是内置的 bash。在此之前,我曾尝试将 eval 放在某个地方,但我不断收到更多错误。我有点卡住了,所以任何帮助将不胜感激。
(顺便说一句,重申一下,我这样做或多或少只是为了更多地学习 bash——这就是为什么我不想将输出重定向到一个文件然后执行该文件。我知道该怎么做那部分,但我不知道如何从命令行完成)
最佳答案
你需要使用一个 eval,$() 给你一个字符串。
eval $( echo echo foo )
另一种选择是插入子 shell 并将其通过管道传递给 bash:
(echo echo foo) | /bin/bash
关于bash:将脚本的输出作为脚本执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5017578/