なぜそうです!シェルスクリプトに使用される文字

なぜそうです!シェルスクリプトに使用される文字

!私は最近、シェルスクリプトで文字列配列をレコード区切り文字として使用しようとしている状況に直面しました。シェルスクリプトでこれを使用すると、スクリプトは自動的に拡張されます。この状況を再現する例は次のとおりです。

check_variable="Hello"
echo "$check_variable"
Output: Hello
###For multiple strings, I tried to concatenate with ! as a record separator. 
echo "$check_variable !"
Output: echo "$check " > Results.txt

!ちょっとした調査の後、私はこれが実際には特殊文字なので、レコード区切り文字として使用しないでください。では、なぜ!使用するのですか?この!役割をオフにしてシェルスクリプトで使用できる方法はありますか?

答え1

!実際にfromを使用する理由の良い説明があります。ここ。コマンドをより明確に理解するために、次のコマンドを実行しました。

pwd- It gives the present working directory.
!pwd - It executes the previously executed pwd command.

!rmこの設定は、ユーザーが誤って実行して前例のない結果をもたらす可能性があるため、危険です。

ペルソナの効果をテストする別の方法は!次のとおりです。

echo "12345647" >> ramesh.txt
cat ramesh.txt
12345647
!echo
cat ramesh.txt
12345647
12345647

!echo次の行が追加され、コマンドが実際に実行されていることがわかります。1234567ファイルとして。

特殊文字をスクリプトのファイル区切り文字またはレコード区切り文字として使用することはお勧めできませんが、次のコマンドを実行するとこの設定を上書きできます。

set -H turns it on; 
set +H turns it off.

答え2

直接的な関係はありませんが、「」の中に内容を入れると、話す内容が挿入されることに注意してください。最初の行に:

check_variable="Hello"

文字列には解釈が必要な内容はありませんが、なぜ解釈する必要がありますか?これはechoを通して$check_variableを使用するときにも機能します。

check_variable='Hello'
echo $check_variable

これにより、Helloが期待どおりに印刷されます。

もしあなたなら〜しなければならない予約された文字を区切り文字として使用し、エコーで使用するときは引用符で囲まないでください。

$ echo $check_variable ! > Results.txt
$ cat Results.txt
Hello !
$ echo '$check_variable !'
$check_variable !

この場合、echoは受信したすべての引数を印刷します(エコー行の!は2番目の引数として扱われます)、すべてのコマンドが同様の操作を実行するわけではありません。この場合、A)は他のコマンドの引数であり、B)「」で囲んで挿入しようとしないため、Bashはこれを特に扱いません。最後のエコーは、「」を使用すると、その中のすべてを補間せずに文字通り処理することを示すことです。

しかし、他の文字についても繰り返すでしょう。

関連情報