以下の関数を使用してすべてのサブディレクトリを印刷しようとしていますが、何らかの理由でファイル名にスペース( "")が含まれている場合、名前はecho
2つの部分に分割されます。例は次のとおりです。
私のディレクトリにはというディレクトリが含まれていますr1 August.request
。
出力は次のとおりです
r1
August.request
私が探しています
r1 August.request
これは私のスクリプトです。
#!/bin/bash
function ScanFile {
for file in `ls` ; do
if [[ -d "$file" ]] ; then
cd "$file"
ScanFile
cd ..
else
echo "$file"
fi
done
}
ScanFile
ベストアンサー1
SH互換シェルにはいわゆるIFS変数があります。 IFS代表内部フィールド区切り記号。この変数は、シェルがパラメータ境界(位置パラメータの境界など)を検出する方法を制御します。
基本的には次のようになります。
set IFS=$' \t\n'
これは、入力をスペース、タブ、および改行区切りトークンに分割することを意味します。
ファイルはスペースで構成されています。この試み:
OLD_IF="$IFS"
IFS=$'\t\n'
for file in `ls -1` ; do
# Content of your loop
done
IFS="$OLD_IFS"
ここで重要なのは、以前のIFS値を保存して復元することです。
編集:ls -1
1行に1つのファイルのリストを追加して、上記の操作を実行します。