モジュールフォルダに拡張子のないファイルを表示し、配列に追加します。
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
$