またどんな特別な役割がありますか?

またどんな特別な役割がありますか?

ファイル名の場合、ファイル名にスペースを含めるには二重引用符またはバックスラッシュを使用する必要があることに注意してください。

「いいねmkdir "I like coffee"」は同じです。mkdir I\ like\ coffee

これで、ファイル名に$を含めるにはバックスラッシュを使用する必要があります。

良いmkdir \$dollar

ファイル名を指定するときに使用するスペースとドル記号に加えて、他の文字は何ですか?

見つかりましたか?そして*はうまく動作するのに他のキャラクターたちはこんなのか気になりますね。

答え1

Unixファイル名にはすべての文字(「/」または「\ 0」を除く)を含めることができるため、これは実際にはシェルの問題であり、エスケープする必要があるメタ文字のリストは、シェルとシェルの特定の構成によって異なります。 bashを使用しているようです。 ?または* glob式が引用符で囲まれていないと、他のシェルは失敗します。

$ mkdir test && cd test
$ ls
$ touch *foo
$ ls
*foo
$ exec zsh
% touch *bar
zsh: no matches found: *bar
% ls
*foo
% 

bashは、これに関してzshのように動作するようにfailedglobシェルオプションを設定できます。通常、すべての内容を引用したり、Unixファイル名にメタ文字(またはスペース)を入れたりしないことをお勧めします。そのパスにより、rm -rf呼び出しがディレクトリツリー全体を破損したり、ランダムに失敗したりする可能性があります(ファイルは引数-iとして読み込まれます)。 )またはシェルコードのセキュリティ問題。

答え2

まだ興味のあるシェルを作成していません。 GNUパラレル参照のすべての文字列ash bash csh dash fdsh fish fizsh ksh ksh93 mksh pdksh posh rbash rc rush rzsh sash sh static-sh tcsh yash zsh。それぞれ少しずつ異なる文字列参照が必要です。詳細については、「sub shell_quote_scalar」を参照してください。http://git.savannah.gnu.org/cgit/parallel.git/tree/src/parallel

コアラインは次のとおりです。

  • bash-家族: s/[\002-\011\013-\032\#\?`(){}[]\^*\<\=>\~\|\; '\202-\377]/\$&/go; s/[\n]/'\n'/go
  • csh-家族: s/[\002-\011\013-\032\#\?`(){}[]\^*\<\=>\~\|\; '\202-\377]/\$&/go; s/[\n]/"\\n"/go
  • rc: s/'/''/g; s/[\n\002-\011\013-\032\#\?`(){}[]\^*\<\=>\~\|\ ; \"!\$\&\'\202-\377]+/'$&'/go

一部のシェルでは、特定のシェルに必要な文字よりも多くの文字を引用しますが、これらの文字は他のシェルから引用する必要があります。たとえば、 '='はbashでは引用する必要はありませんが、zshでは引用する必要があります。

bash$ echo =wc
=wc
zsh% echo =wc
/usr/bin/wc
zsh% echo \=wc
=wc

関連情報