
私がするなら:
IFS="/" read -ra PARTS
パスを手動で入力すると、期待どおりに「PARTS」配列が作成されますが、次のようになります。
IFS="/" read -ra PARTS <<< $(pwd)
単一要素を含む配列を作成し、スラッシュを空白に変換します。
現在の作業ディレクトリを配列に分割する方法は?
答え1
コマンドを引用すると機能します。
IFS="/" read -ra PARTS <<< "$(pwd)"
for i in "${PARTS[@]}"
do
printf '%s\n' "$i"
done
home
user1
答え2
質問です。
現在の作業ディレクトリを配列に分割する方法は?
(「職場にどのように行きますか?」の代わりに)IFS="something" read -a arrayname <<< $(command)
saveIFS="$IFS"; IFS=/ PARTS=($(pwd)); IFS="$saveIFS"
はい、わかりました。頑張った
IFS=/ PARTS=($(pwd))
そして
コマンド全体を...またはで囲んでも、まだにIFS
設定されています。もちろん、それを含めると…メインシェルに設定されなくなります。/
{
;}
eval
(
)
PARTS
IFS=/ declare PARTS=($(pwd))
さらに失敗しました。
最初のコードブロック(saveIFS
)はIFSの以前の値を保存し、それを復元します(変更後)。ただし、以前にIFSが設定されていない場合、上記のコードはIFSを空の文字列(通常は空の文字列と呼びます)に設定します。ご使用の環境にこのような状況が存在し、IFS をセットアップ解除状態に戻すには、次のようにします。
checkIFS="${IFS+1}"
saveIFS="$IFS"
IFS=/ PARTS=($(pwd))
if [ "$checkIFS" ]
then
IFS="$saveIFS"
else
unset IFS
fi
(または1行にすべて)
checkIFS="${IFS+1}"; saveIFS="$IFS"; IFS=/ PARTS=($(pwd)); if [ "$checkIFS" ]; then IFS="$saveIFS"; else unset IFS; fi
ここでcheckIFS
IFSが設定されていない場合は1に設定され、IFSがnullに設定されている場合はい置く。次に、IFSを以前の(設定)/(オフに設定)状態に復元し、以前の値(存在する場合)を復元する明確なテストを実行します。
もちろん、環境を変更せずに維持することに興味がある場合(変数を除くPARTS
)checkIFS
とsaveIFS
。