효율적인 방법으로 배열의 파일 확장자를 다듬습니다.

효율적인 방법으로 배열의 파일 확장자를 다듬습니다.

모듈 폴더에 확장자가 없는 파일을 표시하고 배열에 추가합니다.

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끊습니다 .xargsxargs

실제로 다음과 같이 변수에서 전역 변수를 확장할 수 있습니다.아니요인용해 보세요. 이와 같이:

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
$ 

관련 정보