Answers:
我相信这可以满足您的需求。它将所有参数放在一个字符串中,以空格分隔,并在所有字符串之间加上单引号:
str="'$*'"
$*
产生所有脚本参数,以第一个字符分隔$IFS
,默认情况下,该参数为空格。
在双引号字符串内,不需要转义单引号。
让我们将以上内容放入脚本文件中:
$ cat script.sh
#!/bin/sh
str="'$*'"
echo "$str"
现在,使用示例参数运行脚本:
$ sh script.sh one two three four 5
'one two three four 5'
该脚本是POSIX。它可以使用,bash
但不需要bash
。
我们可以通过调整从空格更改为另一个字符IFS
:
$ cat script.sh
#!/bin/sh
old="$IFS"
IFS='/'
str="'$*'"
echo "$str"
IFS=$old
例如:
$ sh script.sh one two three four
'one/two/three/four'
cd "$*"
就足够了。
cdm(){ str="$*"; cd "$str"; }
或如Scott所建议的cdm(){ cd "$*"; }
。另外,请注意$*
用单个空格替换多个连续的空格。如果您的目录名称可能包含多个连续的空格,制表符或换行符,那么在将这些字符传递给函数之前,确实需要对其进行转义cdm
。
cdm
像那样在调用时在命令行上放置单引号cdm 'test 2 trial 1'
。这将处理所有奇怪名称的庄园。但是,只要将空格限制为单个空格,则cdm
then可以运行为cdm test 2 trial 1
。