一部のLinuxターミナルコマンドのこれらの記号の意味は何ですか?[閉まっている]


12

AskUbuntuで、非常に複雑に見えるコマンドがいくつかあり、その中にたくさんのシンボルがあります。これらのコマンドがどのように構築されているかをよりよく理解するために、記号の意味を知りたいと思います。

例えば:

find ~/ -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;

またはさらに複雑:

echo -e "\e[${i#*=}m$( x=${i%=*}; [ "${!x}" ] && echo "${!x}" || echo "$x" )\e[m"

、、などのパラメータを追加すると-c--debugメインコマンドに特定の効果があることをよく理解しています。これらの意味は、ほとんどすべての場合にmanページに記載されているため、実際に探しているものではありません。

答えで、私が与えた例を説明する代わりに、記号が具体的に何をするかを定義してみてください。次のようになります。

" means 'argument': the main command uses anything within these symbols as its source
^ is used for ...
# is used for ...

前もって感謝します


私は、コマンドに依存だと思う-c -Dコマンド2のコマンド1で何かとcompletly異なることを意味するかもしれない
ウリエレーラ

ちょっと、最初のコマンドを変更しましたか?編集はどこ
ですか

私は最初のコメントを変更しました、それはそれが情報価値のないものを保持していたからです。可能な限り相対的な例を示したいと思います。そのための適切なセクションで編集コメントを作成しました。-c -Dに感謝します。質問を更新しました。
Exeleration-G

回答:


14

参照してください。Bashのリファレンスマニュアルと呼ばれるセクションシェル操作高度なバッシュ・スクリプトガイド 第3章(特殊文字を)

ubuntu / linuxのシェルスクリプトについて何か新しいことを学ぶ必要があるときはいつでも参照します。

ABS第3章が目的に最も簡単にナビゲートできると思います。すべてのシンボルはページの左端に表示され、そのすぐ下に説明があります。


高度なBashスクリプトガイド-第3章は素晴らしいです。ありがとう。
Exeleration-G

高度なbashスクリプトガイドの第3章のリストは不完全で、部分的に間違っています。Advanced Bash Scriptingガイドは、bashを学習するのに適したリソースではありません。代わりにmywiki.wooledge.org/BashGuideおよびmywiki.wooledge.org/BashFAQを参照してください。
ガイラ

@geirha ABSは非常に役立つことがわかりましたが、特定のコマンドのシンボルについては、代わりにマニュアルページを見るのが好きで、リンクも素晴らしいです-ブックマークされています。ありがとう。
-SaultDon

7

残念ながら、マニュアルページに移動する必要があります。「シンボル」は、どのコマンドを読んでいるかによって意味が異なる場合があるためです。

たとえば、最初のコマンドでは、{}と\;の意味 findコマンド(man find)に依存します。sedの引数の引用符の意味は、sedまたはbashに依存します(引用符で囲まれたパラメーターであるため、シェルの場合もあります)。〜/は間違いなくbashパターンの展開物です。

2番目の複雑なコマンドについては、ほとんどがエコーするものなので、そのほとんどの情報はbashのマニュアルページにあります。

これに対するコメントに回答するには、リダイレクト文字> <| ファイルとの間のパイプ処理(大なり記号と小なり記号)、およびコマンドの出力と別の入力(パイプ|)の接続に使用されます。I / Oリダイレクトに関する優れたチュートリアルについては、こちらをご覧ください。これは、Unixシェルおよびツールセットの非常に強力な設計機能です。


OK、そしてどう>ですか?それは私が頻繁に見るサインでもあり、「コピー」か何かを意味すると思った。これもコマンドに依存していますか?
Exeleration-G


3

終わるファイルのための第一1の検索.cディレクトリ内から~/execUTES sed(流線エディタ)sedのsためearches cybernetnewsとにそれを変更しますcybernet

2番目のものは私を避けます...実行すると空の結果が表示されます。


ここでの別の質問から得たものであるため、それは可能性が非常に高いです。コンテキストがなければ、おそらく何もしません。
Exeleration-G

2

ターミナルコマンドの学習に最適なリソースはLinuxCommandです。これは、使用可能な最も使用されているコマンドの詳細な説明を提供します。


不正なリンクです。更新または削除してください。
flyingdrifter

2

複雑なコマンドを貼り付けているため、シンボルの完全な意味を伝えるのは困難です。

特にエコー。

-eについてはman echoを参照してください。エスケープが有効になるため、遅い\ eはエスケープです。

他のシンボルの大部分は文字列操作です。

したがって、文字列「foo」を含む変数iがあるとします

i=foo;echo $i
foo

しかし、変数$ iも文字列の一部である場合、より複雑になります

echo $ibar # Note: no output

echo ${i}bar # we have output
foobar

これで文字列も操作でき、一部のみを印刷できます

あなたの場合

$ {i#* =} = print $ i、*と=の間の最短一致を取り除きますが、*自体はワイルドカードです..

echo ${i#o}
foo

echo ${i#*o}
o

http://tldp.org/LDP/abs/html/string-manipulation.htmlを参照してください

次に、サブシェル(x ...)をヒットします

Bashはサブシェルでコマンドを処理し、コマンドの出力を返します。

x =(iの部分文字列); 継続する

これでテスト[[$ {!x}]]ができました

参照:http : //tldp.org/LDP/abs/html/testconstructs.html

そして、ここで私はあなたにこれ以上話すことができません。

bashでは、$ {!x}は空の文字列になります。&& ==論理的および|| 論理的または

テスト{空の文字列} AND空の文字列またはエコーx

より多くの構文を与える必要がありますが、このエコーはどこかに出力されているようです。

再び[]はテストであり、最初に[をエスケープしました。

したがって、エコーが何をしているのかについて説明することしかできません。

端末でechoコマンドを入力したときに出力が表示されない理由は、コードのスニピットであり、デフォルトではxもiも定義されていないため、すべての出力が空です。


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