ファイル名の各文字を繰り返すには?

ファイル名の各文字を繰り返すには?

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}は内容の長さですvarprintf %q明示的な形式で出力を印刷します$'\n'。たとえば、改行文字は 。

おすすめ記事