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)