如何将字符串作为参数传递给bash命令

如何将字符串作为参数传递给bash命令,bash,shell,Bash,Shell,我有一个字符串变量,它包含一个循环 loopVariable="for i in 1 2 3 4 5 do echo $i done" 我想把这个变量传递给shell脚本中的bash命令。但我总是犯错误 bash $loopVariable 我也试过了 bin/bash $loopVariable 但它也不起作用。Bash处理给我一个错误的字符串。但从理论上讲,它执行它。我不知道我做错了什么 bash: for i in 1 2 3 4 5 do echo $i done: No such

我有一个字符串变量,它包含一个循环

loopVariable="for i in 1 2 3 4 5 do echo $i done"
我想把这个变量传递给shell脚本中的bash命令。但我总是犯错误

bash $loopVariable
我也试过了

bin/bash $loopVariable
但它也不起作用。Bash处理给我一个错误的字符串。但从理论上讲,它执行它。我不知道我做错了什么

bash: for i in 1 2 3 4 5 do echo $i done: No such file or directory
我还尝试使用while循环使用这种方法。但是得到同样的错误

i=0 
loopValue="while [ $i -lt 5 ]; do make -j15 clean && make -j15 done"
bash -c @loopValue
当我使用bash-c“@loopValue”时,我得到以下错误

bash: -c: line 0: syntax error near unexpected token `done'
当我使用时,只需使用bash-c@loopValue

[: -c: line 1: syntax error: unexpected end of file

您可以添加
-c
选项以从参数读取命令。以下方面应起作用:

$ loopVariable='for i in 1 2 3 4 5; do echo $i; done'
$ bash -c "$loopVariable"
1
2
3
4
5
来自man bash:

另一种方法是使用标准输入:

bash <<< "$loopVariable"

但是使用中的函数几乎总是更好的。

您不需要使用
bash-c
打开新进程。您可以改用Bash函数:

function loopVariable {
  for i in 1 2 3 4 5; do echo $i; done
}

loopVariable
请注意,因为没有创建supprocess,所以您不需要像导出
bash-c
一样导出变量以在子进程中使用它们。所有这些都在脚本范围内可用

输出:

1
2
3
4
5

那么-c做什么呢?它允许bash从参数列表中读取要执行的命令,而不是标准输入。我可以对while循环使用相同的方法吗?@KvyatkovskySergey:当然,为什么不呢?任何有效的bash命令(或命令列表)都被接受。我正在将loopVariable值分配给while[0-lt 3]do make-j15 clean和&make-j15 done,但得到相同的错误while
while
while[$i-lt 5];使-j15清洁和使-j15清洁;完成(缺少
之前的
完成
),并且您的bash命令:
bash-c$loopValue
,而不是
bash-c@loopValue
。现在它给出了`-c:第1行:语法错误:文件的意外结尾“我的坏…”。。。双引号引用变量:
bash-c“$loopValue”
它现在抱怨意外的完成标记
loopvariable='for i in 1 2 3 4 5; do echo $i; done'
bash -c "$loopvariable"
function loopVariable {
  for i in 1 2 3 4 5; do echo $i; done
}

loopVariable
1
2
3
4
5