Dis*_*fan 1 directory macos bash arguments slash
在 MacOSX 中,可以在 Finder 中创建名称中包含正斜杠“/”的文件夹。
我正在尝试通过执行类似于
args=("$@")
name=${args[0]}
street_corner=${args[1]}
my_folder="Hello ${name} - ${streetcorner}"
mk () {
case "$1" in /*) :;; *) set -- "./$1";; esac
mkdir -p "$1"
}
mk $my_folder
Run Code Online (Sandbox Code Playgroud)
其中街角是格式为“street 1/street 2”的交叉点,因此需要将斜杠保留在目录名称中。
我读了几篇像这样的文章,其中解释了如何在您自己设置字符串时操纵字符串以转义或保持前进。我遇到的问题是用户传递了要在脚本中使用的参数,因此当我运行命令以使用$my_folder作为参数创建目录时,字符串已经被封装。
如何扩展 street_corner 的值而不让正斜杠创建位于目录“street 1”内的名为“street 2”的子目录,而是创建一个名为“street 1/street 2”的单个目录?
我尝试了这些修复但失败了
street_corner="${args[0]}"
my_folder='"Hello ${name} - ${streetcorner}"'
my_folder="'Hello ${name} - ${streetcorner}'"
my_folder="Hello ${name} - ${'streetcorner'}"
my_folder="Hello ${name} - ${$"streetcorner"}"
my_folder="Hello "${name}" - "${streetcorner}
Run Code Online (Sandbox Code Playgroud)
并且还尝试为 street_corner 提供输入,例如
./my_script.sh "name" "street 1\/street 2"
./my_script.sh "name" 'street 1/street 2'
./my_script.sh "name" "'street 1/street 2'"
Run Code Online (Sandbox Code Playgroud)
涉及/和的路径名:(原因将在下面讨论)在 macOS 下有点混乱。简短的回答是:
/在文件名中使用。:.首先,/不是 POSIX 路径名中的有效字符;它被保留为路径组件分隔符。期望有效文件名作为参数的命令行工具将拒绝那些包含/.
Finder似乎允许您创建名称包含 的文件或文件夹/,但它会默默地将 转换/为:. 您可以从终端确认这一点。foo/bar在您的主目录中创建一个文件夹;它看起来就像foo:bar你ls从终端运行一样。
其次,:历史上被用作经典 Mac OS 中的路径分隔符。Finder 仍然不允许您创建名称包含 的文件夹:,但命令行工具(如mkdir)可以。mkdir foo:bar将起作用,并且名称将进一步显示foo/bar在 Finder 中。