簡體   English   中英

Bash 參數擴展轉義值不帶引號

[英]Bash parameter expansion escaped value without quotes

我需要在主機和 Docker 容器之間共享數據,使用-v參數:

$ docker -v host_dir:container_dir image_name

在這種特定情況下,我需要共享當前的工作目錄。 通常可以這樣做

$ docker -v `pwd`:container_dir image_name

但是,如果當前工作目錄包含任何空格(或其他應轉義的字符),則會失敗。 有一種特殊的方法可以擴展參數值以安全地重用於輸入:

$ docker -v ${PWD@Q}:container_dir image_name

但這也無濟於事,因為路徑用單引號括起來,這會導致非法參數值: -v '/present/working/dir with spaces':container_dir 正確的語法是-v /present/working/dir\ with\ spaces:container_dir

所以,我的問題是,如何擴展參數值,escaping 帶有反斜杠的特殊字符而不是將值括在引號中?

您希望在 shell 命令行上的引號內包含變量:

$ docker -v "`pwd`:container_dir" image_name
or
$ docker -v "$PWD:container_dir" image_name

否則 bash 將在命令替換或參數替換發生后進行分詞。

這里發生的不是帶有反斜杠的 escaping:這只會讓 bash 認識到您不希望在那里發生分詞,這使得它作為單個參數傳遞給您的程序(在本例中為 docker)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM