タグ付けされた質問 「quoting」

文字列は通常、引用符で区切られているため、引用符を含む文字列を処理する際に問題が発生します。


1
引用符内のワイルドカード
これは簡単なことですが、私の記憶では、シェルスクリプトで二重引用符を使用すると、グロビングと変数を拡張できます。 しかし、次のコードでは: #!/bin/sh echo *.sh echo "*.sh" echo '*.sh' echo $LANG echo "$LANG" echo '$LANG' 私はこの結果を得ます: bob.sh redeployJboss.sh *.sh *.sh en_US.utf8 en_US.utf8 $LANG それで、シングルクォートはグロブと変数展開を防ぎますが、ダブルクォートは変数展開のみを許可し、グロビングはできませんか? 引用パターンでグロブできますか?

2
grepとドル記号のエスケープ
どのファイルに文字列があるのか​​知りたいです$Id$。 grep \$Id\$ my_dir/mylist_of_files 0回を返します。 私は使用しなければならないことを発見しました grep \$Id$ my_dir/mylist_of_files 次に$Id、出力でが色付けされていることがわかります。つまり、一致しています。 どうやって2つ目を一致させることができ$、なぜ機能しないの\$Id\$ですか 2番目$が最後の文字であるかどうかは関係ありません。 grep2.9 を使用します。 質問を投稿する前に、Googleを使用しました... 答えを見つけました test2という名前のファイルで$(ドル記号)を検索するには、次のように入力します。 grep \\ $ test2 \\(二重バックスラッシュ)文字は、シェルに強制的に\ $(単一のバックスラッシュ、ドル記号)をgrepコマンドに渡すために必要です。\(単一のバックスラッシュ)文字は、次の文字(この例では$)を式文字ではなくリテラル文字として扱うようにgrepコマンドに指示します。バックスラッシュなどのエスケープ文字を使用する必要性を回避するには、fgrepコマンドを使用します。 しかし、なぜgrep \$Id機能するのか、なぜgrep \\$Id\\$機能しないのかはわかりません。 私は少し混乱しています...

6
入力番号が整数かどうかを確認する
入力が整数かどうかを確認しようとしていますが、100回入力を繰り返しましたが、このエラーは表示されません。残念ながら機能しません。すべての入力(数値/文字)のifステートメントをトリガーします read scale if ! [[ "$scale" =~ "^[0-9]+$" ]] then echo "Sorry integers only" fi 引用符をいじりましたが、見逃したか、何もしませんでした。何が間違っていますか?入力が単なる整数かどうかをテストする簡単な方法はありますか?

4
ssh $ host $ FOOおよびssh $ host“ sudo su user -c $ FOO”タイプの構造で引用
私はしばしばssh経由で複雑なコマンドを発行します。これらのコマンドにはawkまたはperlの1行へのパイプが含まれ、その結果、単一引用符と$が含まれます。私は、適切に引用を行うためのハードで速いルールを理解することも、それに対する良い参照を見つけることもできませんでした。たとえば、次のことを考慮してください。 # what I'd run locally: CMD='pgrep -fl java | grep -i datanode | awk '{print $1}' # this works with ssh $host "$CMD": CMD='pgrep -fl java | grep -i datanode | awk '"'"'{print $1}'"'" (awkステートメントの余分な引用符に注意してください。) しかし、どうすればこれを動作させることができssh $host "sudo su user -c '$CMD'"ますか?このようなシナリオで見積もりを管理するための一般的なレシピはありますか?..
30 bash  shell  ssh  quoting 

3
単一引用符を使用してシェルで特殊文字をラップするときに「単一引用符」をエコーする方法は?
私は今日http://www.tutorialspoint.com/unix/unix-quoting-mechanisms.htmからシェルチュートリアルを読んでいます それが言及している: 出力する文字列内に一重引用符が含まれる場合は、次のようにバックスラッシュ()を使用する前に文字列全体を一重引用符で囲まないでください。 echo 'It\'s Shell Programming' 私はこれをcentosサーバーで試しましたが、うまくいきません>。もっと入力するように促すプロンプトが出ます。 2つの一重引用符がすべての特殊文字を通常の文字に変換するので、エスケープシンボルを含む\が、それ自体を除外するので、 一重引用符で一重引用符を表現するに'はどうすればよいの'だろうか?
26 shell  quoting 

2
リモートユーザーのログインシェルを知らずにssh経由で任意の単純なコマンドを実行するにはどうすればよいですか?
ssh を実行すると、迷惑な機能があります: ssh user@host cmd and "here's" "one arg" cmd引数をオンhostにしてそれを実行する代わりに、それとcmd引数をスペースで連結しhost、結果の文字列を解釈するためにシェルを実行します(呼び出したのsshではなく、呼び出した理由ですsexec)。 さらに悪いことに、その文字列を解釈するためにどのシェルが使用されるのかはわかりません。その文字列はログインシェルでuserあることが保証されていないtcshため、ログインシェルとして使用している人々がまだfish増えているためです。 それを回避する方法はありますか? 私は記憶された引数のリストのようなコマンドがあるとbash、アレイを、非ヌルのバイトの任意の配列を含むことができるそれぞれが、それが実行されたためにどのような方法があるhostようにuserかかわらず、そのログインシェルの一貫した方法でuserオンhost(これは主要なUnixシェルファミリの1つであると仮定します:Bourne、csh、rc / es、fish)? 私ができるはずのもう1つの合理的な仮定は、Bourne互換のshコマンドがhost利用できる$PATHということです。 例: cmd=( 'printf' '<%s>\n' 'arg with $and spaces' '' # empty $'even\n* * *\nnewlines' "and 'single quotes'" '!!' ) ksh/ zsh/ bash/ でローカルに実行できますyash: $ "${cmd[@]}" <arg with $and spaces> <> <even * * * …

5
エコーではなくifで変数を引用する必要があるのはなぜですか?
変数を展開するには二重引用符が必要であることを読みました。例えば if [ -n "$test" ]; then echo '$test ok'; else echo '$test null'; fi 期待どおりに動作しますが、 if [ -n $test ]; then echo '$test ok'; else echo '$test null'; fi がnullで$test okあっても常に言い$testます。 しかし、なぜ引用符が必要ないのecho $testですか?
26 shell  quoting 

4
スペースとワイルドカードを含むパスを含む文字列でのbashスクリプトエラー
Bashスクリプトの基本を理解するのに苦労しています。ここに私が持っているものがあります: #!/bin/bash FILES="/home/john/my directory/*.txt" for f in "${FILES}" do echo "${f}" done 私がやりたいのは、すべての.txtファイルをforループにリストすることです。しかし、中のスペースmy directoryとアスタリスクは*.txtうまく再生されていません。二重引用符の有無にかかわらず、変数名に中括弧の有無にかかわらず使用してみましたが、すべての.txtファイルを印刷できません。 これは非常に基本的なことですが、疲れてまっすぐに考えることができないため、私はまだ苦労しています。 何が間違っていますか? ファイルにスペースやアスタリスクがなければ、上記のスクリプトを正常に適用することができました。しかし、スペースとアスタリスクの両方があると、すべてが台無しになります。

5
エコーが引用文字を無視するのはなぜですか?
この質問は、UnixおよびLinux Stack Exchangeで回答できるため、Server Faultから移行されました。 8年前に移行され ました。 echoコマンドは、私はそれを与えることを完全なテキストを含めていません。たとえば、次の場合: $ echo ' echo PARAM=` grep $ARG /var/tmp/setfile | awk '{print $2}' ` ' 以下を出力します: echo PARAM=` grep $ARG /var/tmp/setfile | awk {print } ` 'echoコマンドに含まれていた単一引用符()は含まれていません。二重引用符に切り替えた場合: $ echo " echo PARAM=` grep $ARG /var/tmp/setfile | awk '{print $2}' ` " echo何も出力しません!最初の例で単一引用符を省略し、2番目の例では何も出力しないのはなぜですか?入力したとおりに出力するにはどうすればよいですか?
24 shell  quoting  echo 

5
[[]]テストで二重引用符を使用する理由
bashスクリプトに2つの整数があるとします。 value1=5 value2=3 次に、テストの場合に二重引用符を使用する必要があるのはなぜですか?例えば: if [[ "$value1" -eq "$value2" ]] なぜ次のものを使用しないのですか? if [[ $value1 -eq $value2 ]] 私にとって、二重引用符は意味をなさない。
23 bash  shell  quoting  variable  test 

2
疑問符で始まるすべてのファイルを削除します
約4kのファイルがあるフォルダーがあります。これらのファイルの一部は、aa ?または!文字で始まります。それらを削除する必要がありますが、削除する式が見つかりません。 rm -f ./?* すべてを削除するだけです。おそらくgreplsで使用し、パイプを使用してxargsファイルを別のフォルダーに移動できますが、これを行う適切な方法があることを望んでいました。?と!ファイルの両方でヘルプが必要です。

2
シェルスクリプトで些細な文字をエスケープするのはなぜですか?
レガシーシェルスクリプト(Solarisの古いksh88で作成された)を開いたところ、コード全体で次のことが繰り返されていることがわかりました。 [ -f $myfile ] && \rm -f $myfile バックスラッシュのエスケープは、私を奇妙に感じます。 この種の(明らかに役に立たない)エスケープはコード全体で繰り返されるため、意図的に行われていることを知っています。元の著者はいなくなってしまったので、私は彼と連絡を取って彼に尋ねることはできません。 これは単に著者の面白い特異性ですか、それともある時点で意味のある非推奨の良い習慣ですか?それとも、実際に物事を行うための推奨方法であり、私は完全に何かを見逃していますか?

5
「>」という名前のファイルを削除するにはどうすればよいですか?
私は、誤動作し、sudoという名前のファイルを作成するために使用するPythonスクリプトを実行していました>。 このファイルを削除するにはどうすればよいですか? もちろん、私がしようとするとsudo rm >、エラーが発生しますbash: syntax error near unexpected token 'newline'。これは、の出力をリダイレクトしようとしていると思われるためですrm。 その許可は-rw-r--r--です。
22 bash  quoting  filenames  rm 

4
echo `date`、echo" `date`"、およびecho '`date`'の違いは何ですか?
これら3つのコマンドの違いは何ですか? echo `date` echo "`date`" echo '`date`' 私は違いが実際に何であるかについて混乱しています。'が周りにある場合、それは文字列であることを意味すると思います。したがって、エコーはdate日付を表示する代わりに文字列を文字通り出力しますか?
22 shell  quoting  echo 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.