Bash sciptのUNCパラメータ

Bash sciptのUNCパラメータ

「純粋な」UNC(つまり、文字通りバックスラッシュをエスケープしたくない)をパラメータとして使用するbashスクリプトを作成したいと思います。つまり、次のようになります。

./foo \\my\share\is\here

しかし、当然、上記のスクリプトは次のようになります。

\私の共有はここにあります

どういうわけか正確なUNCをパラメータとして読み込み、それを変数に保存できますか?

答え1

一重引用符を使用してください。

[root@xxx601 ~]# ./stack \\my\share\is\here
You Gave Me: \myshareishere
[root@xxx601 ~]# ./stack '\\my\share\is\here'
You Gave Me: \\my\share\is\here

答え2

シェルスクリプトで./foo引数を使用してコマンドを実行するには、任意の形式を使用する必要があります。\\my\share\is\here引用する、バックスラッシュ文字はシェルで特別な意味を持つからです。最も簡単な引用形式は、パラメータを一重引用符で囲むことです。一重引用符ペア間のすべての内容は文字通り処理され、この方法で含めることができない唯一の文字は一重引用符文字自体です。

./foo '\\my\share\is\here'

スクリプトがあり、foo引数を使用してコマンドラインで実行する場合は、引用符も\\my\share\is\here使用する必要があります(コマンドラインはシェルです)。

と入力すると、./foo \\my\share\is\herefooを入力したのかわかりません。実行中のシェルはfooコマンドラインを解析し./foo、次のスペースが単語区切り文字であるか、最初の単語は実行するコマンド名、2番目の単語は引数、文字の順序はバックスラッシュ+何か形式であることを確認します。役割を表すものです。これはあなたが書いたのと同じ現象ですfoo ; bar。実行されるシェルコマンドの場合、foo文字列はbar渡されません。同様に、引数を使用して実行します。たとえば、パラメータを使用して実行するには、その内容(または他のバリアント)を書き留める必要があります。; barfoo./foo \\my\share\is\here./foo\myshareishere./foo\\my\share\is\here./foo '\\my\share\is\here'./foo \\\\my\\share\\is\\here./foo '\'"\\m"y\\share'\is\'"here"""

関連情報