Bourne Shellとzshで変更されずに動作する変数の単語や行を繰り返す「for」構文はありますか?

Bourne Shellとzshで変更されずに動作する変数の単語や行を繰り返す「for」構文はありますか?

コマンドでは、1行に1つずつ繰り返したい文字列のリストを含む変数がありますfor...in...do...done

Bourne Shellとzshを頻繁に切り替えます。私が知っている限り、zshはデフォルトでBernシェルから改行やスペースで文字列から単語を分離しません。したがって、zshなどのコマンドfor list_item in $list; do...は失敗しますが、bourneシェルでは機能するか、変数の代わりにリテラルテキストを使用できます。コマンドで変数を使用して参照しようとしましたが、IFS=進歩がないようです。

簡単に実装できるように、両方のシェルで変更されていない状態で動作する文字列の単語/行を繰り返す単一の構文はありますか?そうでない場合、ベストプラクティスは何ですか?

ベストアンサー1

optionsを使用してbashと同様にzshのトーク​​ン化動作を明示的に設定すると、bashとzshの間の一貫した動作が得られますshwordsplit。たとえば、

set -o shwordsplit

var='foo bar baz'
for item in $var; do
    echo "$item"
done

IFSこれにより、zshはbashと同様に内部フィールド区切り文字()に基づいてトークン化を実行します。

おすすめ記事