a b
名前にスペースを含む3つのファイル(、c d
および)を含むディレクトリがあるとしますe f
。vi
最初の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
改行だけで出力を分割する方法はありますか?
はい、IFS
1つの改行に設定します(デフォルトではスペース、タブ、改行が含まれています)。
IFS=$'\n'
vi $(ls | head -n 2)
($''
非標準ですが、Bash/ksh/zshで動作し、他の選択肢よりも美しいです。)
つまり、ファイル名にグローバル文字を含めることができるという問題が残っています。ワイルドカードを無効にするには、set -f
まず使用してから再度set +f
有効にする必要があります。また、ファイル名に改行文字が含まれていると機能しませんが、あなたも知っているはずです。