どのように私は、別名にこの引用符内のsedで引用符を使用するにはどうすればよいですか?
ls -1 | sed 's/\(.*\)/alias \1 "shot \1"/'
を得るのですか?
例:
alias asdf "ls -1 | sed 's/\(.*\)/alias \1 "shot \1"/'"
私はエイリアスの引用符を取得するときに問題があります。このよう
どのように私は、別名にこの引用符内のsedで引用符を使用するにはどうすればよいですか?
ls -1 | sed 's/\(.*\)/alias \1 "shot \1"/'
を得るのですか?
例:
alias asdf "ls -1 | sed 's/\(.*\)/alias \1 "shot \1"/'"
私はエイリアスの引用符を取得するときに問題があります。このよう
:あなたは代入演算子(=
を)忘れてしまった
alias asdf="ls -1 | sed 's/.*/alias & \"shot &\"/'"
。二重引用符で二重引用符を取得するには、\"
でそれらをエスケープする必要があります。
また、キャプチャグループと逆参照を&
に変更しました。これは完全一致を示しています。
ls
の出力をプログラムで処理すると、not recommendedになります。堅牢なソリューションは、たとえば、find
またはファイルグロブ(anubhava's answerなど)を使用しますが、質問の主なポイントは二重引用符をエスケープすることです。
あなたは等号を見落としました。二重引用符をエスケープする必要があります。あなたのファイル名は、英数字またはDOTが含まれているか、アンダースコア、あなたがls
の出力を解析することは避けてくださいと仮定すると、
alias asdf="ls -1 | sed 's/\(.*\)/alias \1 \"shot \1\"/'"
:これを試してみてください。 もう1つの落とし穴は、パイプラインをコマンドに使用することで、現在のシェルではないサブシェルでのみalias
が作成されます。
あなたは代わりにこのfor
ループを使用することができます。
for f in *; do
alias $f="shot $f"
done
を関数を使用し、別名を使用しないでください:
my_func() {
ls -1 | sed 's/.*/alias & "shot &"/'
}
あなたはすべきであるしかしavoid parsing the output of ls。リンクをお読みください!あなたのケースでは
、なしのファイル名には改行がないと仮定すると、1は^ 0を使用することができます。
my_func() {
printf '%s\n' * | sed 's/\(.*\)/alias \1 "shot \1"/'
}
^0 LSを解析し、同じ問題をあなたになり残すが、なしの呼び出しなし余分なプロセスは、printfがビルドされているためです。
「\」で引用符をエスケープすると、一致しないものが返されます。 – user1869582