답변:
나는 이것이 당신이 원하는 것을한다고 믿습니다. 모든 인수를 공백으로 구분하여 하나의 문자열에 모두 작은 따옴표로 묶습니다.
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
같이 실행될 수 있습니다 cdm test 2 trial 1
.
생각보다 쉽습니다.
#!/bin/bash
array="${@}"
echo $array
chmod + x을 실행하십시오.
$ ./example.sh --foo bar -b az
--foo bar -b az