Bash komut dosyasında komut satırı bağımsız değişkenlerini değiştirmenin bir yolu var mı? Örneğin, bir Bash betiği şu şekilde çağrılır:
./foo arg1 arg2
Komut dosyasında arg1'in değerini değiştirmenin bir yolu var mı? Gibi bir şey:
$1="chintz"
Yanıtlar:
Tüm bağımsız değişkenleri sıfırlamalısınız. Örneğin değiştirmek için $3
:
$ set -- "${@:1:2}" "new" "${@:4}"
Temel olarak, değiştirmek istediğiniz argümanlar dışındaki tüm argümanları mevcut değerlerine ayarlarsınız . POSIX 7 tarafından da belirtilmiştir .set --
"${@:1:2}"
Gösterimi (dolayısıyla iki genişletilir 2
gösterimde) başlanarak konumsal argümanlar ofset 1
(örneğin $1
). Bu, "$1" "$2"
bu durumda için bir kısaltmadır , ancak örneğin, değiştirmek istediğinizde çok daha kullanışlıdır "${17}"
.
Okunabilirliği ve bakımı için optimize, sen atama daha iyi olabilir $1
ve $2
(Bilmiyorum, daha anlamlı değişkenlere input_filename = $1
ve output_filename = $2
falan) o zaman ve bu değişkenlerden birini (üzerine yazarak input_filename = 'chintz'
o durumda,) değişmeden komut girişini bırakarak başka yerde gerekli.
Bunun eski bir soru olduğunu biliyorum ama thkala'nın cevabını çok yararlı buldum , bu yüzden bu fikri kullandım ve tanımlanmamış herhangi bir argüman için varsayılanlar eklememe olanak sağlamak için biraz genişlettim - örneğin:
# set defaults for the passed arguments (if any) if not defined.
#
arg1=${1:-"default-for-arg-1"}
arg2=${2:-"default-for-arg-2"}
set -- "${arg1}" "${arg2}"
unset arg1 arg2
Umarım bu başka biri için faydalıdır.