sh -c内でループを実行する方法

sh -c内でループを実行する方法

を使用するときに何をエスケープする必要があるのか​​理解できません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

これに関する詳細情報はどこにありますか?

ベストアンサー1

-c一般的な慣行は、一重引用符(後ろ)でスクリプトを定義することです。使用する必要がある他の部分は、構成が{1..4}機能するシェルです。

$ bash -c 'for i in {1..4}; do echo $i; done'  # also work with ksh and zsh

ダッシュと連携させる代替方法は、対話式shに使用するシェルから拡張することです(対話式シェルとしてbashまたはzshを使用すると仮定します)。

$ dash -c 'for i do echo $i; done' mysh {1..4}
1
2
3
4

おすすめ記事