gpt4 book ai didi

bash - Bash参数扩展转义的值不带引号

转载 作者:行者123 更新时间:2023-12-02 20:56:45 25 4
gpt4 key购买 nike

我需要使用-v参数在主机和Docker容器之间共享数据:

$ 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
因此,我的问题是,如何扩展参数值,用反斜杠转义特殊字符,而不是将值括在引号中?

最佳答案

您想在shell命令行上的引号内包含变量:

$ docker -v "`pwd`:container_dir" image_name
or
$ docker -v "$PWD:container_dir" image_name
否则,bash将在命令替换或参数替换发生后执行单词拆分。
这里发生的事情不是用反斜杠转义:这只是使bash识别出您不希望在那里发生分词,这使其作为单个参数传递给您的程序(在本例中为docker)。

关于bash - Bash参数扩展转义的值不带引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62487800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com