たとえば、スペースを含むファイル名があるとしますwith space
。 「空白を含む」を引数として受け入れるcmd
次のコードでは、何を出力する必要がありますか?ls
$ ls `cmd`
私は努力したls `echo 'with space'`
。に渡されるパラメータはとls
です。バックスラッシュを使用してスペースを抜けようとしても機能しません。使い方がうまくいくと思います。ただし、空白を含む可能性のある一部のファイルに複数のファイルを引数として渡したい場合は機能しません。'with
space'
ls "`cmd`"
ls
コマンドの置き換えに関するマニュアルもまれです。https://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html
より一般的には、cmdが他のコマンドで使用するためにバックティック置換を使用して置き換えることができるファイルのリストを出力したい場合、cmdが従う出力形式は何ですか?
答え1
使い方が
ls "`cmd`"
うまくいくと思います。ただし、複数のファイルをlsの引数として渡したい場合は機能しません。
いいですね。これはコマンドを変数に保存するのと同じ問題です(すでに議論されています)。たとえば、ここ)、本当にうまくできません。思い出させるオプションは次のとおりです。
cmd
NULで区切られたファイル名のリストを出力し、xargs -0
それを別のコマンドにパイプします。IFS
どんなファイル名にも出ない文字に設定し、cmd
これに区分してファイルリストを出力する。- 出力は
cmd
シェルから正しく引用されてからeval
。
このように:
$ touch "with space" "another space"
$ printf "%s\0" "with space" "another space" | xargs -0 ls -i
1705749 another space 1705230 with space
$ set -f; IFS=%; ls -i $(echo "with space%another space")
1705749 another space 1705230 with space
$ eval ls -i "$(echo '"with space" "another space"')"
1705749 another space 1705230 with space
find -exec ...
または交換が可能な場合は使用してくださいcmd
。