모듈 폴더에 확장자가 없는 파일을 표시하고 배열에 추가합니다.
function toolbox {
array=(`ls "$1" | xargs`)
len=${#array[array{@]}
for (( i=0; i<$len; i++ ))
do
echo "`basename ${array[$1]} .ssh`"
done
}
이렇게 하면 원하는 결과가 나오지만 for 루프를 사용해야 합니다.
toolbox "module"
답변1
${var#word}
확장은 배열 ${var%word}
에서도 작동합니다.
arr=(/dir/dir1/foo.ssh /dir/dir2/bar.ssh )
arr2=("${arr[@]##*/}")
arr2=("${arr2[@]%.ssh}")
printf "%s\n" "${arr2[@]}"
인쇄 foo
하고 bar
.
이 명령 대체는 공백(아무것도 없더라도 ) 또는 따옴표(때문에 )가 포함된 파일 이름을 ls | xargs
끊습니다 .xargs
xargs
실제로 다음과 같이 변수에서 전역 변수를 확장할 수 있습니다.아니요인용해 보세요. 이와 같이:
array=( $1 )
( IFS
여전히 중요하지만 먼저 빈 문자열로 설정하지 않으면 공백이 있는 패턴이 깨집니다.)
그러나 이름이 다음으로 끝나는 파일만 찾는 경우 다음 스크립트에 .ssh
디렉터리를 인수로 전달하고 glob을 전달할 수 있습니다.*.ssh
array=( "$1"/*.ssh )
답변2
스크립트: (.ssh 접미사를 제거하고 각 요소에 -SSH를 추가합니다.)
array=(abc.ssh xyz.ssh ssh "q r.ssh s.ssh" "mmm.ssh^Mnnn.ssh")
for e in "${array[@]}"
do
echo ${e%.ssh}"-SSH"
done
산출:
abc-SSH
xyz-SSH
ssh-SSH
q r.ssh s-SSH
nnn-SSH
그리고 "${array[*]}"
:
nnn-SSH xyz.ssh ssh q r.ssh s.ssh mmm.ssh
그리고 ${array[*]}
:
abc-SSH
xyz-SSH
ssh-SSH
q-SSH
r-SSH
s-SSH
nnn-SSH
"mmm"이 누락된 것은 놀라운 일이 아닙니다.
$ printf "a^Mb"
b$ echo "a^Mb"
b
$