Bashを使用して、スペースとエスケープ文字を含むフォルダを入力します。

Bashを使用して、スペースとエスケープ文字を含むフォルダを入力します。

次の形式でフォルダリストにアクセスできます。 lastname, firstname(id) 端末でフォルダを入力しようとすると、 cd test/lastname,\ firstname\(id\) 空白がないのにバックスラッシュがある理由がわからないようです。私のスクリプトは資格情報にアクセスでき、バックスラッシュを使用して正確な形式が生成されますが、まだbashスクリプトからフォルダに入ることはできません。私が使用する変数は次のとおりです。 folder="lastname,\ firstname\(id\)"

これにより、cd $HOME/test/$folder/ そのフォルダがないことがわかります。さまざまな問題に対して提案されたいくつかの解決策を試しましたが、うまくいきませんでした。フォルダ変数の二重引用符の中に入れると、完全な式は機能しません。私は何が間違っているのか分からないので、うまく動作しないと思います。誰かがここで私を助けることができれば良いでしょう!

答え1

これ:

私が使用する変数は次のとおりです。folder="lastname,\ firstname\(id\)"

〜するいいえ働くなぜなら、変数は維持するバックスラッシュ:

[maulinglawns@ArchLinux ~]$ folder="lastname,\ firstname\(id\)"
[maulinglawns@ArchLinux ~]$ echo "$folder"
lastname,\ firstname\(id\)

したがって、次のメッセージが表示されます。

cd "slask/$folder" 
bash: cd: slask/lastname,\ firstname\(id\): No such file or directory

この問題を解決する最も簡単な方法は、""次のように変数をに入れることです。

[maulinglawns@ArchLinux slask]$ mkdir lastname,\ firstname\(id\)
[maulinglawns@ArchLinux slask]$ folder="lastname, firstname(id)"
[maulinglawns@ArchLinux slask]$ cd "$folder"
[maulinglawns@ArchLinux lastname, firstname(id)]$ 

これにより、シェルは変数のスペースに分割されません。変数と参照の詳細をご覧ください。ここ

答え2

拡張子引用符($folder例拡張子、「パラメータ拡張子」):

$ cd "$HOME/test/$folder/"

値を一重引用符で囲んだ場合:

$ folder='lastname, firstname(id)'

上記のコードはバックティックなしでうまくcd機能します。

関連情報