質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.44%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

3回答

4831閲覧

evalでコマンドを展開するとシングルクォーテーションが消える

laulaula

総合スコア74

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2021/11/04 06:33

パスワードをハッシュ化するシェルスクリプトを作成しております。

パスワードの一文字目がハイフンの場合だとオプションと認識されエラーとなる為、シングルクォーテーションで囲みましたが、実行されるタイミングでシングルクォーテーションが消えてエラーとなります。

回避策がございましたらご教示下さい。

実行したコマンド
eval (command -arg1 -arg2 ’-password‘ )

実行するとシングルクォーテーションが消えて、

command -arg1 -arg2 -password

として実行され、引数3がオプションと誤認識されエラーとなる。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2021/11/05 06:11

> ご推察の通りredhat製品のコマンドになります。 redhat製であれば、コマンド名を公開したほうが回答がつきやすいと思うのですが、そのコマンドはその会社専用のコマンドですか?
laulaula

2021/11/06 00:59

すみません、秘守義務があるため、具体的なコマンドの記述は控えさせて頂いております。
itagagaki

2021/11/06 01:09

コマンドの仕様がわからないと回答のしようがありませんので質問の体をなしていません。
laulaula

2021/11/06 02:07

誠に申し訳ございません。 タグにbashとあるように、bash観点でご回答頂けると助かります。 最初に明確に記載すれば良かったのですが、、、
itagagaki

2021/11/06 02:11

ですから、bashがコマンドに「どのような」引数を与えなければならないか、が問題ですよね。 ということは、そのコマンドの仕様はどうなのか、がわからないと、答えを導けないのではないですか?
laulaula

2021/11/06 02:16

他で回答してますが、 bash -x で確認すると シングルクォーテーションが消えるの動作ですので、commandの解釈でなくbashの解釈と認識していた次第です。 前にも書きましたが、 forループで回すと特殊記号があるものはシングルクォーテーションが残り、特殊記号がないものはシングルクォーテーションが消えます。 これはbash -xでデバッグで表示され、確認済みです。
itagagaki

2021/11/06 02:23

bash ではシングルクオートで囲んだ中の文字は特別な意味を持たないようになります。シングルクオートはそのために「付加」する特別な文字なので、当然に、あなたの表現で言えば「消えます」。 > forループで回すと特殊記号があるものはシングルクォーテーションが残り、特殊記号がないものはシングルクォーテーションが消えます。 ちょっと意味がわかりません。具体例を示してもらえますか。 下記のようなことならシングルクオートは当然出力されません。 for s in aaa -bbb ccc; do eval "(echo '${s}')"; done
laulaula

2021/11/06 04:49

ご回答ありがとうございます。 例題に挙げて頂いた処理の流れとほぼ同じ処理をしております。 私も多少の経験はございますので、シングルクォーテーションの挙動にいては多少の知見がございますが、消えるというのは、デバッグ表示上で command -arg1 -arg2 ’password‘ と表示され実行されるものと command -arg1 -arg2 password と、シングルクォーテーションが消えて表示されるものがあるという意味です。 その差異を見るに変数に代入したパスワードに特殊記号が含まれていたものは、シングルクォーテーションは残り、特殊記号が含まれてないものは消えてコマンドを実行しているようにデバッグ上に表示されておりました。
itagagaki

2021/11/06 04:57

質問の目的は、コマンドに対して、-から始まる引数をオプションと解釈されないような形にして渡すことなのではないですか? コマンドにとって「オプションと解釈されないような形」とはどういう形なのかが不明なため、その目的に対する回答がつかない状態となっています。 -x オプションの挙動に不審な点があるので、知識として知りたい、ということなら質問の仕方が違うかと。 そして、その不審な挙動を再現できるコードを示してください。 それは command の守秘義務などは関係ないはずです。
laulaula

2021/11/06 06:27

ご回答ありがとうございます。 AWSにインスタンスを立てて類似検証を実施いたしました。 test.sh ===================== #!/bin/bash for line in `cat password.txt` do eval "(echo '${line}')" done ===================== # bash -x test.sh ++ cat password.txt + for line in `cat password.txt` + eval '(echo '\''h5yu|*,aid'\'')' ++ echo 'h5yu|*,aid' h5yu|*,aid + for line in `cat password.txt` + eval '(echo '\''ZrLjvRpM.4'\'')' ++ echo ZrLjvRpM.4 ZrLjvRpM.4 + for line in `cat password.txt` + eval '(echo '\''TjE8EYCPC$'\'')' ++ echo 'TjE8EYCPC$' TjE8EYCPC$ + for line in `cat password.txt` + eval '(echo '\''fjXvm,N8Tj'\'')' ++ echo fjXvm,N8Tj fjXvm,N8Tj + for line in `cat password.txt` + eval '(echo '\''UN%Gp,*8Gi'\'')' ++ echo 'UN%Gp,*8Gi' UN%Gp,*8Gi + for line in `cat password.txt` + eval '(echo '\''D)439HNK3!'\'')' ++ echo 'D)439HNK3!' D)439HNK3! + for line in `cat password.txt` + eval '(echo '\''Th3r|gtHy3'\'')' ++ echo 'Th3r|gtHy3' Th3r|gtHy3 + for line in `cat password.txt` + eval '(echo '\''#3n+Jm3BXD'\'')' ++ echo '#3n+Jm3BXD' #3n+Jm3BXD + for line in `cat password.txt` + eval '(echo '\''~9tUj3,b&_'\'')' ++ echo '~9tUj3,b&_' ~9tUj3,b&_ + for line in `cat password.txt` + eval '(echo '\''7.9%CRx6(-'\'')' ++ echo '7.9%CRx6(-' 7.9%CRx6(- + for line in `cat password.txt` + eval '(echo '\''bni7Z~z!Fn'\'')' ++ echo 'bni7Z~z!Fn' bni7Z~z!Fn + for line in `cat password.txt` + eval '(echo '\''*Qy,P4e8|P'\'')' ++ echo '*Qy,P4e8|P' *Qy,P4e8|P + for line in `cat password.txt` + eval '(echo '\''-BcA5Kwr#E'\'')' ++ echo -BcA5Kwr#E -BcA5Kwr#E + for line in `cat password.txt` + eval '(echo '\''33Sm*x|,Y|'\'')' ++ echo '33Sm*x|,Y|' 33Sm*x|,Y| + for line in `cat password.txt` + eval '(echo '\''*nWa7NPXsS'\'')' ++ echo '*nWa7NPXsS' *nWa7NPXsS + for line in `cat password.txt` + eval '(echo '\''TEDLP~2)Ri'\'')' ++ echo 'TEDLP~2)Ri' TEDLP~2)Ri + for line in `cat password.txt` + eval '(echo '\''KVvA/j*9.T'\'')' ++ echo 'KVvA/j*9.T' KVvA/j*9.T + for line in `cat password.txt` + eval '(echo '\''Gb67B)Uk3z'\'')' ++ echo 'Gb67B)Uk3z' Gb67B)Uk3z + for line in `cat password.txt` + eval '(echo '\''.EH8xiAt+6'\'')' ++ echo .EH8xiAt+6 .EH8xiAt+6 + for line in `cat password.txt` + eval '(echo '\''4Y$QAx|7hT'\'')' ++ echo '4Y$QAx|7hT' 4Y$QAx|7hT 上記のような出力結果となりました。 ++ echo 'TEDLP~2)Ri' のようにシングルクォーテーションが表示されているものもございますが、 ++ echo .EH8xiAt+6 のようにシングルクォーテーションが表示されないものがあります。 上記において、これをハッシュ化のパスワードに流し込んだ場合にシングルクォーテーションが消えるパターンで最初の一文字目がハイフン(-)だとオプションと誤認識されエラーとなる処理です。 正直に言いますと、最初の一文字目がハイフンの場合はエラー処理に流す処理内容にしておりますので、 運用回避で対応する予定ですが、この辺を例外なく全てできたほうが気分的に良いので、あれば対処したいというレベルです。
itagagaki

2021/11/06 06:41

それは単に bash -x の表示の仕方が違うだけの話です。 bash -xc "echo 'aaa'" + echo aaa bash が echo に渡す引数は aaa です。なので -x による表示は echo aaa となっています。 bash -xc "echo 'a|a'" + echo 'a|a' bash が echo に渡す引数は a|a です。ここにシェルにとって特別な文字が含まれているので -x による表示では敢えて echo 'a|a' と表示されています。 ちなみに bash -xc 'echo "a|a"' + echo 'a|a' ダブルクォートで囲っていたとしてもシングルクオートで表示されます。 以上のように、「シングルクオートが消える」というのは -x の表示の話であって、コマンドに渡す引数がどうなるかはまた別の話。 一文字目が - だとオプションだと解釈されてエラーになるのをどう回避するかというのはまったく別の問題ですね。
laulaula

2021/11/06 08:25

正直、なぜ別問題との結論となるのか理解しづらいですね。 また、bash -xcではコマンドの展開レベルがことなるので、意味をなしていないと思われます。 実際にハッシュ化するコマンドの引数として指定していた場合、先に示した表示結果で渡されたと考えられる挙動があります。 例えばですが、ハッシュ化コマンドに流す引数に特殊記号が含まれたいた場合、パスワードの代入された引数が特殊記号を解釈し中折れして中途半端な文字数をハッシュ化しますが、先の表示できちんとシングルクォーテーションが表示されていた場合は正常にハッシュ化がされます。 例 + eval '(echo Gb67B)Uk3z )' test.sh: eval: line 4: syntax error near unexpected token `Uk3z' 引数内の")"で最初の"("の対と解釈され中折してます。 しかし、先の表示例においては + eval '(echo '\''Gb67B)Uk3z'\'')' ++ echo 'Gb67B)Uk3z' Gb67B)Uk3z とシングルクォーテーションが表示、且つ効いて正常に変数内の値を展開できています。 その為、私は『++ echo 'Gb67B)Uk3z'』で表示された結果がそのままコマンド行として解釈していると考えております。
laulaula

2021/11/06 08:32

そして、ハイフン(-)の場合では + eval '(echo '\''-BcA5Kwr#E'\'')' ++ echo -BcA5Kwr#E -BcA5Kwr#E とシングルクォーテーションが表示されていない場合があるため、オプションとして解釈されエラーとなる認識です。
itagagaki

2021/11/06 08:33

-x の表示結果がそのまま引数になっているわけではないということは私が示した通りです。 それは理解できますか? ++ echo 'Gb67B)Uk3z' Gb67B)Uk3z これはコマンドに対して Gb67B)Uk3z という引数を渡しています。 -x による表示にシングルクオートが付け足されているのは、この文字列の中に ) があるからです。 それだけのことです。 それも理解できますか? さて、あなたはコマンドに何を渡したいのですか? 問題はそこではないのですか?
itagagaki

2021/11/06 08:37

-x による表示にシングルクオートが付いているかどうかとエラーとの間に関係が無いのにあると思い込んで問題の本質を見誤っているように思います。
laulaula

2021/11/06 09:03

あのー。 変に小難しくする必要ないと思うのですが。 渡したい文字列にシングルクォーテーションがその中身を渡し、 シングルクォーテーションで囲まれてないものもその文字列を渡しますが、 特殊記号が含まれている場合はシングルクォーテーションで囲む表示していた場合は、bashが何を渡すべきか解釈して値を正確に渡してます。
laulaula

2021/11/06 09:09

シングルクォーテーションのあるなしでどの値を正確に渡しているかわかると思うのですが。。。 それで、今回の問題は特殊記号を含まずに一文字目がハイフンの場合にbashが渡した値は正しいが、コマンドはオプションとして解釈してエラーとなる。 ただし、手動で入力しシングルクォーテーションで囲んでいた場合においても、コマンドはシングルクォーテーションの中身を文字列と正しく認識するためとおる。 この手動と同じ状況をうまく作れないか? ということですね。
itagagaki

2021/11/06 09:10 編集

小難しくしているのはあなたのほうかと。 では聞きます。 -aaa をオプションと解釈されないようにするには Command にどう渡せばよいのですか? そもそもそういう問題なのでは? これは何度もお伺いしているのに、そこは一向に答えられませんよね。 こんなの守秘義務は関係ないと思いますが。 そのまま -aaa を渡したらオプション引数と解釈されてエラーになるわけでしょう? ではどう渡せばよいのですか?
laulaula

2021/11/06 09:22

その当たり前のことを論点にするのは控えて頂けないですか? 何を渡しているかわからなかったら、ハッシュ化したパスワードを登録した後にそのパスワードでログイン出来ないですわね。
itagagaki

2021/11/06 12:18

なぜ問題を解決するための私の簡単な質問に答えずに文句ばかりおっしゃるのですか? あなたからの情報で私が答えられることはすべて答えました。 納得できないならそれまでです。 がんばってください。
guest

回答3

0

自己解決

少し荒れてしまいましたので、内容を整理し解決済みとさせていただきます。

今回、複数のパスワードを一括でハッシュ化するシェルスクリプトを作成した際、変数に代入したパスワードの一文字目がハイフン(-)から始まるとハッシュ化コマンドがオプションと誤認識しエラーとなる事象が発生しました。

大まかな構文は以下。

#!/bin/bash for line in `cat password.txt` do eval "(command -arg1 -arg2 '${line}' )" done

※コマンドの詳細は守秘義務により控えさせていただいております。

これをechoコマンドで代替しbash -xでデバックすろと、以下のように特殊記号が含まれる場合はシングルクォーテーションが表示され、特殊記号が含まれない場合はシングルクォーテーションが表示されない挙動となることを確認。

$ bash -x test.sh ++ cat password.txt + for line in `cat password.txt` + eval '(echo '\''h5yu|*,aid'\'' )' ++ echo 'h5yu|*,aid' ★特殊記号が含まれるためシングルクォーテーションを表示される h5yu|*,aid + for line in `cat password.txt` + eval '(echo '\''ZrLjvRpM.4'\'' )' ++ echo ZrLjvRpM.4 ★特殊記号が含まれないためシングルクォーテーションを表示されない

そして、今回の回答者様とのやり取りでここの解釈の相違により拗れた。
回答者様は単に表示の問題と指摘されたが、私はecho 'h5yu|*,aid'がそのままコマンドとして実行していると認識している。
ここで一点抑えておきたいのは手動で以下のようにシングルクォーテーションでパスワードをくくった場合、コマンドはシングルクォーテーションを解釈し、シングルクォーテーションで囲まれた値を文字列として認識する。

# command -arg1 -arg2 '-password' →ハッシュ化すべき値をシングルクォーテーションを除外した「-password」と認識する。

問題となるのはこれをシェフスクリプトで展開するとシングルクォーテーションが消され、オプションとして認識される。

command -arg1 -arg2 -password →シングルクォーテーションが外されてるため「-password」とオプションと認識する。

シングルクォーテーションで囲まれた値を文字列と解釈するコマンドは、至極当然だが先のbash -xで示したechoコマンドも同じく多数存在する(grepなど)。その為、コマンド自体の仕様はどうでもよく、bashがそのような挙動(シングルクォーテーションを残すか消す)をするという事実が重要と考えており、コマンド自体は秘密とさせていただきました。

取り合えずは、bashとしてはシングルクォーテーションの扱いは基本コマンド側に任せる仕様なのだと推察しています。
※繰り返しになるが表示の問題ではない。
※回答者様とはここのファクトで認識を合わせ、次の議論を進めていれば建設的な会話ができていたとは思うのですが。。。

最初の一文字目がハイフンの場合、どうすればシングルクォーテーションを消されずに認識させれるかの回答までは届きませんでしたが、実際のスクリプトでは最初の一文字目がハイフンの場合はエラー処理に流れるように修正しておりますので、ここでの質問としては一旦解決済みとさせていただきます。

bashのソースコードを読めばわかるかもしれませんが、そこまで労力を掛ける必要性もございませんので。。。

投稿2021/11/06 09:53

編集2021/11/06 19:09
laulaula

総合スコア74

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

itagagaki

2021/11/06 12:24

質問されていた、エラーとなることの「回避策」はどうなったのですか?
itagagaki

2021/11/06 14:54

> bashとしてはシングルクォーテーションの扱いは基本コマンド側に任せる仕様なのだと推察しています。 そこがすべての誤りの出発です。その誤りを認めない限り話が噛み合いません。
laulaula

2021/11/06 18:48 編集

違います。確かにその部分は間違いの可能性は高いですが、表示の問題で一蹴されてる限り話は進みません。 これはもう終わりです。
itagagaki

2021/11/07 00:56

自分の誤った認識に固執して、回答にまったく耳を傾けず逆切れする姿勢が、話が進まない原因です。 その姿勢では問題は解決しませんよ。
laulaula

2021/11/08 23:06 編集

そのままお返しします。あと、大人相手に足し算の説明をされる様な回答されても無駄に時間が掛かります。 また、単に表示の問題なのか引数としての実態なのかはbashのソースを見ない限り水掛け論の空中戦となりますので、この点で相違がある限り話は進まないと考えておます。
itagagaki

2021/11/09 02:55

話になりません。 ・あなたは私からの問いに全く答えていません。 ・あなたは私が提示した事実を受け入れていません。 これで話が進むわけがありますか?
itagagaki

2021/11/09 03:01

・bashのソースなど見なくても外部仕様から明らかです。 ・それに疑いを持つのならechoでbashから渡された引数を見れば明らかです。 ・echoはbashの組み込みコマンドだから信頼に足らないというなら、あなたは/bin/echoなどで見て見ることができます。 ・それも信頼できないなら、あなたは #include <stdio.h> void main(int argc, char *argv[]) { for (int i = 0; i < argc; i++) { printf("%s\n", argv[i]); } } をコンパイルして試してみることができます。 bashのソースコードを読む必要などありません。
itagagaki

2021/11/09 03:03

あなたは誤った自説を頑固に守りたいだけです。
guest

0

重複質問だけど、こちらに回答がついてしまっているので、こちらで。

そういうケースで引用符で囲むのは無意味です。
コマンド名を伏せているということは、世の中一般のコマンドでは無いということでしょうが、

・コマンドの仕様のバグ
⇒直さない限り、ハイフンで始まるパスワードを指定する方法が無い

・コマンド仕様をあなたが知らないだけ
⇒何らかの手段で、ハイフンで始まるパスワードを指定する方法がある

のどちらかなので、こういう場で聞いてもしょうが無く、コマンドの開発者(コマンドの提供元)に聞きましょう。

投稿2021/11/04 16:59

otn

総合スコア84864

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

laulaula

2021/11/05 05:21

ご回答ありがとうございます。 ご推察の通りredhat製品のコマンドになります。 パスワードですが、シェルスクリプトでなく、手入力でコマンドを入れシングルクォーテーションでパスワードを囲んだ場合、最初の文字がハイフンでも通り、この処理をスクリプト化するとシングルクォーテーションが勝手に消えるため(bash -xで実行し確認)、私の知らないbashの仕様、またはバクの可能性を疑っておりました。
otn

2021/11/05 17:05

redhat製品のコマンドなら「世の中一般のコマンド」ですけど。 シェルに手入力で入れた場合、 command -arg1 -arg2 ’-password‘ command -arg1 -arg2 -password の2つは同じです。前者はシングルクォートをシェルが外してからコマンドに渡します。 動きが違うなら、上記のような記述で無い記述をしているのだと思いますが、それを書きましょう。 「こんな感じでやったらうまく行きません」ではアドバイス不能で、 「具体的にどうしたらどうなった」を正確に書きましょう。
laulaula

2021/11/06 00:57

ご回答ありがとうございます。 秘守義務があるため具体的な記述は控えさせて頂いております。 コマンドの手動実行では command -arg1 -arg2 ’-password‘ これは問題なくハッシュ化されます。 シェルスクリプトでは eval "( command -arg1 -arg2 '${variable}' )" で実行 これをbash -xで確認すると command -arg1 -arg2 -password として実行されてます。 そのため echo "command -arg1 -arg2 '${variable}' " > test.tmp として吐き出し command -arg1 -arg2 ’-password‘ として認識されてることを確認後、 . test.tmp で実行権限を与えつつシェルスクリプト内で実行すると command -arg1 -arg2 -password として実行されたため やはりエラーとなりました。 ただし、複数のパスワードをforループで回して実行すると恐らく特殊記号が含まれる場合はシングルクォーテーションが残り、特殊記号が含まれない場合はシングルクォーテーションが自動で消える挙動が確認できました。 そのため、bashの挙動によりシングルクォーテーションをbashが勝手に解釈して消すような動作があるか確認したくここで質問致しました。 最初にキチンと記載すれば良かったのですが、、、
otn

2021/11/06 03:22

> 秘守義務があるため具体的な記述は控えさせて頂いております。 いや別に、パスワードをそのまま乗せろという意味じゃ無いことは言わずもがなかと思ってました。 コマンドラインの英字はaだろうがbだろうが文法的には同じなので、区別できればaaaやbbbで問題ないです。 お書きのコマンドだと、全角の{}がありますが、実際は半角ですよね。そういうところをちゃんとやれと言うことです。他に、記号の改変は無いですよね? これから外出なので、またあとで。
laulaula

2021/11/06 04:40

やれ? って何様ですか? pcでできる環境でないため、スマホで入力しており、細かな記述はできない状況で申し訳ないとは思ってますが、最低限の言葉遣いは守るべきだと思いますが。
otn

2021/11/07 02:49 編集

「ちゃんとやれと言うことです。」って、普通に使う言葉ですが、あなたの感覚では乱暴な言葉だったのでしょうか。「頑張れと言うことです。」とかも「頑張れ」が命令形なので駄目なのかな。 失礼しました。 そもそもこの文は「「具体的にどうしたらどうなった」を正確に書きましょう。 」の意味を解説したもので、直接私があなたに向けて言った言葉では無いです。
guest

0

evalは関係なくて、

command -arg1 -arg2 '-password`

と打っても command への引数は -arg1 -arg2 -password となることに変わりありません。

-passwordがオプション引数でないことをcommandに伝える方法が別途必要だと思います。

たとえばですが、

command -arg1 -arg2 - -password

のように、- の後はオプションではないという規則にして、commandがそのように解釈するようにするとか。

投稿2021/11/04 06:38

itagagaki

総合スコア8402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

laulaula

2021/11/04 14:13

ご回答ありがとうございます。 少しわかりづらかったかも知れませんが、commandはバイナリーで書かれた既成コマンドで、それに引数3として変数に格納したパスワードを代入しております。 そのため、コマンド全体としてはダブルクォーテーションで以下のように括り、引数3の変数のところだけシングルクォーテーションで括っています。 "( command -arg1 -arg2 '${variable}')" これをforループで回転させながら複数のパスワードをハッシュ化してるのですが、特殊記号があるものはシングルクォーテーションが残り特殊記号が無いものは勝手にシングルクォーテーションが消えるような動作をします。 ここがうまく制御できず、一旦エラー処理で回避する処理内容に変更したものの、なんとも解決せずに逃げたようで気持ち悪くて笑
itagagaki

2021/11/04 14:25

commandは既成のコマンドで修正できないわけですね。 でも引数を解釈するのはcommandですよね。 では、commandに - で始まる名前をオプションではないものと解釈してもらう手段が備わっているのか?ということになります。 それはどうなんですか? もしシングルクオートで囲んで渡せばその中身を取り出してくれるようになっているというのでしたら、 command -arg1 -arg2 \'-password\` とすれば良いだけのことです。 つまりシングルクオートはシェルにとって特別な文字ですので \ でエスケープするだけです。
laulaula

2021/11/04 16:31

ご回答ありがとうございます。 スマホで書いてるため説明が足りず申し訳ございません。 バックスラッシュでのエスケープも試しているのですが、挙動は同じでした。 明日、ハイフン単体で上手くいくか試してみます。
itagagaki

2021/11/05 00:39

まずは command が - で始まる引数をオプションではないものとして解釈するようにする仕様を教えてください。それがわからないことには回答のしようがありません。
laulaula

2021/11/06 01:03

ご回答ありがとうございます。 秘守義務があるため具体的は記述は控えております。 特殊記号がある場合はシングルクォーテーションが残り、特殊記号がない場合はシングルクォーテーションが消える挙動が確認できているため、bashの挙動なのかと考えていたのですが、皆様の回答見る限り違いそうですね。 毎回丁寧なご回答を頂きありがとうございます。
itagagaki

2021/11/09 08:40

この回答を低評価したのが誰か知りませんが、もし回答に誤りがあるなら指摘してみなさい。
itagagaki

2021/11/09 09:56

卑怯な真似はおやめなさい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問