
ある時点で、複数のフォルダーのユーザー権限を確認する必要があるスクリプトを作成しようとしています。パスは変数に保存され、各パスは新しい行に格納されます。
これまでのところ、私はこれを持っています:
output=$PATH
output=$(echo "$output" | tr ':' '\n' | sort )
arr=($(echo "$output"))
for i in "$arr"
do
echo "$i"
if ! [[ -x $i ]]; then
echo "You are missing execute Permission on
echo "$i"
fi
done
出力にはいくつかのパスが含まれますが、私の場合は変数の内容です$PATH
。
最初の行では、複数行の変数を配列に変換し、すべての配列要素を反復処理します。
コードを実行すると、最初のエントリに対してのみ機能し、ループを終了する前にecho "$i"
のみ表示されます。/bin
したがって、複数行の変数を配列に変換しなかったと思われます。
答え1
交換する:
for i in "$arr"
と:
for i in "${arr[@]}"
$arr
配列の最初の要素のみを参照します。 {$arr[@]}
各要素は個別の単語としてすべての要素に展開されます。
また、bash 4.0 以降をお持ちの場合は、以下をarr
1 つの手順で作成できます。
mapfile -t arr <<<"${PATH//:/$'\n'}"