Ayırıcı olarak boşluk içeren bir dize bulunduğunu varsayalım:
newline_separated=${space_separated// /$'\n'}
Ancak muhtemelen yanlış soruyu soruyorsunuz. (Mutlaka gerekli değildir, örneğin bu bir makefile'de ortaya çıkabilir.) Dosyadan boşlukla ayrılmış bir liste gerçekten işe yaramazsa: dosya adlarından biri boşluk içeriyorsa ne olur?
Bir program dosya isimlerini argüman olarak alırsa, onları boşluklarla birleştirmeyin. "$@"Onlara birer birer erişmek için kullanın . Her ne kadar echo "$@"baskılar arasında boşluk olan argümanlar, o nedeniyle olduğunu echo: o ayırıcı olarak boşluk ile argümanları basar. somecommand "$@"dosya adlarını komuta ayrı argümanlar olarak iletir. Bağımsız değişkenleri ayrı satırlara yazdırmak istiyorsanız,
printf '%s\n' "$@"
Boşluklu dosya adlarınız varsa ve bunları üzerinde çalışmak üzere bir diziye koymak istiyorsanız, değeri karakterlere bölmek için işaretsiz bir değişken genişletme kullanabilirsiniz IFS(joker karakter genişletmesini devre dışı bırakmanız gerekir set -f, aksi takdirde glob desenler değerinde genişletilecektir):
space_separated_list='/path/to/file1 /path/to/file2 /path/to/file3'
IFS=' '; set -f
eval "array=(\$space_separated_list)"
for x in "${array[@]}"; do …
Bunu, -fayarı ve yapılan işlemin değerini geri yükleyen bir fonksiyonda saklayabilirsiniz IFS:
split_list () {
local IFS=' ' flags='+f'
if [[ $- = *f* ]]; then flags=; fi
set -f
eval "$1=($2)"
set $flags
}
split_list array '/path/to/file1 /path/to/file2 /path/to/file3'
for x in "${array[@]}"; do …