for
したがって、外部ループはディレクトリ内のすべてのファイルを繰り返し、内部ループにはfor
そのファイル名のすべての文字を繰り返す単純なネストされたループがあります。
#!/bin/bash
if [ $# -lt 1 ]
then
echo "Please provide an argument"
exit
fi
for file in `ls $1`
do
for ch in $file
do
echo $ch
done
done
上記のスクリプトは機能しません。内部ループは、ファイル名のすべての文字を繰り返すのではなく、内容全体を繰り返します。
修正する:
@ilkkachuの答えに基づいて、次のスクリプトを思いつくことができ、期待どおりに動作します。しかし、for...in
ループを使わずに文字列を繰り返すことができるかどうか疑問に思います。
#!/bin/bash
if [ $# -lt 1 ]
then
echo "Please provide an argument"
exit
fi
for file in `ls $1`; do
for ((i=0; i<${#file}; i++)); do
printf "%q\n" "${file:i:1}"
done
done
ベストアンサー1
Bashを使っているので:
#!/bin/bash
word=foobar
for ((i=0; i < ${#word}; i++)); do
printf "char: %q\n" "${word:i:1}"
done
${var:p:k}
与えられたKvar
場所から始まる文字血、${#var}
は内容の長さですvar
。printf %q
明示的な形式で出力を印刷します$'\n'
。たとえば、改行文字は 。