在MacOSX目录名的bash$参数中保留正斜杠

在MacOSX目录名的bash$参数中保留正斜杠,bash,macos,directory,arguments,slash,Bash,Macos,Directory,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 其中街角是一个交叉路

在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
其中街角是一个交叉路口,格式为“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}
并尝试为街角提供输入,如

./my_script.sh "name" "street 1\/street 2"
./my_script.sh "name" 'street 1/street 2'
./my_script.sh "name" "'street 1/street 2'"

在脚本中,需要在行的右侧双引号:

name="${args[0]}"
street_corner="${args[1]}"
和命令:

mk "$my_folder"
还有一个打字错误。删除街角的下划线

然后按如下方式调用脚本:

./my_script.sh "name" "street 1\/street 2"


在脚本中,需要在行的右侧双引号:

name="${args[0]}"
street_corner="${args[1]}"
和命令:

mk "$my_folder"
还有一个打字错误。删除街角的下划线

然后按如下方式调用脚本:

./my_script.sh "name" "street 1\/street 2"


你的问题不是引用

正斜杠是UNIX类型操作系统中的路径分隔符。它几乎是文件名中唯一不能包含的字符(尽管它可以是路径的一部分,在路径中可以表示目录层次结构)。您可以使用空格、制表符甚至换行符。但没有向前猛砍


因此,答案是,如果不将
street1
解释为目录以外的任何内容,就不能将
street1/street2
用作文件名。

你的问题不是引用

正斜杠是UNIX类型操作系统中的路径分隔符。它几乎是文件名中唯一不能包含的字符(尽管它可以是路径的一部分,在路径中可以表示目录层次结构)。您可以使用空格、制表符甚至换行符。但没有向前猛砍


因此,答案是,如果不将
street1
解释为目录以外的任何内容,就不能将
street1/street2
用作文件名。

涉及
/
的路径名在macOS下有点混乱。简单的回答是:

  • 不能在文件名中使用
    /
  • 出于历史原因,查找者假装您可以
  • 同样由于历史原因,查找器假装您不能使用

首先,
/
不是POSIX路径名中的有效字符;它保留为路径组件分隔符。期望有效文件名作为参数的命令行工具将拒绝包含
/
的文件名

Finder似乎允许您创建一个文件或文件夹,其名称包含
/
,但它会将
/
自动转换为
。您可以从终端确认这一点。在主目录中创建一个名为
foo/bar
的文件夹;如果从终端运行
ls
,它将显示为
foo:bar



其次,
在传统Mac OS中被用作路径分隔符。Finder仍然不允许您创建名称中包含
的文件夹,但命令行工具(如
mkdir
)可以
mkdir foo:bar
将起作用,而且名称将在查找器中显示为
foo/bar

涉及
/
的路径名在macOS下有点混乱。简单的回答是:

  • 不能在文件名中使用
    /
  • 出于历史原因,查找者假装您可以
  • 同样由于历史原因,查找器假装您不能使用

首先,
/
不是POSIX路径名中的有效字符;它保留为路径组件分隔符。期望有效文件名作为参数的命令行工具将拒绝包含
/
的文件名

Finder似乎允许您创建一个文件或文件夹,其名称包含
/
,但它会将
/
自动转换为
。您可以从终端确认这一点。在主目录中创建一个名为
foo/bar
的文件夹;如果从终端运行
ls
,它将显示为
foo:bar



其次,
在传统Mac OS中被用作路径分隔符。Finder仍然不允许您创建名称中包含
的文件夹,但命令行工具(如
mkdir
)可以
mkdir foo:bar
将起作用,而且名称将在查找器中显示为
foo/bar

因此,您需要将streetcorner中的斜杠转换为文件名中的冒号。这应该是可行的:
myu folder=“Hello${name}-${streetcorner/\/\/:}”。你可以用大括号把这个乱七八糟的地方解读为:streetcorner变量(
streetcorner
)的值,所有(
/
)斜杠字符(
\/`-注意它是转义的,所以不会被误认为是分隔符)替换为(
/
)冒号(
).谢谢你@chepner和@gordon davisson!=)因此,您需要将streetcorner中的斜杠转换为文件名中的冒号。这应该是可行的:
myu folder=“Hello${name}-${streetcorner/\/\/:}”。您可以将花括号中的混乱理解为:streetcorner变量(
streetcorner
)的值