如何在 sh -c 内运行循环

Chr*_*her 4 shell shell-script escape-characters for

我无法理解使用时需要转义的内容sh -c

假设我想运行 for 循环for i in {1..4}; do echo $i; done。就其本身而言,这工作得很好。如果我将它传递给eval,我需要转义$: eval "for i in {1..4}; do echo \$i; done",但我不能让它工作sh -c "[...]"

$ sh -c "for i in {1..4}; do echo $i; done"
4

$ sh -c "for i in {1..4}; do echo \$i; done"
{1..4}

$ sh -c "for i in \{1..4\}; do echo \$i; done"
{1..4}

$ sh -c "for i in \{1..4\}\; do echo \$i\; done"
sh: 1: Syntax error: end of file unexpected
Run Code Online (Sandbox Code Playgroud)

我在哪里可以找到有关此的更多信息?

Qua*_*tal 10

-c通常的做法是在单引号内定义脚本(在 后面)。您需要使用的另一部分是一个外壳,其中{1..4}构造有效:

$ bash -c 'for i in {1..4}; do echo $i; done'  # also work with ksh and zsh
Run Code Online (Sandbox Code Playgroud)

让它与 dash (你的sh)一起工作的一种替代方法是在你正在交互使用的 shell 上进行扩展(我假设你使用 bash 或 zsh 作为你的交互式 shell):

$ dash -c 'for i do echo $i; done' mysh {1..4}
1
2
3
4
Run Code Online (Sandbox Code Playgroud)