Bash コマンド置換で改行文字を使用して分割

Bash コマンド置換で改行文字を使用して分割

a b名前にスペースを含む3つのファイル(、c dおよび)を含むディレクトリがあるとしますe fvi最初の2つのファイルを編集するために使用したいと思います。私が望むbashコマンドは

vi "a b" "c d"

また、最初のコマンドのパラメータを置き換えることができるように:をls使用してコマンドの最初の2行を取得したいと思います。head

ls | head -n 2

しかし、実行するとvi $(ls | head -n 2)、内部出力が空白と改行に分割されるvi a b c dため、私は望むものではありません。$()改行だけで出力を分割する方法はありますか?

ベストアンサー1

改行だけで出力を分割する方法はありますか?

はい、IFS1つの改行に設定します(デフォルトではスペース、タブ、改行が含まれています)。

IFS=$'\n'
vi $(ls | head -n 2)

$''非標準ですが、Bash/ksh/zshで動作し、他の選択肢よりも美しいです。)


つまり、ファイル名にグローバル文字を含めることができるという問題が残っています。ワイルドカードを無効にするには、set -fまず使用してから再度set +f有効にする必要があります。また、ファイル名に改行文字が含まれていると機能しませんが、あなたも知っているはずです。

おすすめ記事