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 2gö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 $1ve $2(Bilmiyorum, daha anlamlı değişkenlere input_filename = $1ve output_filename = $2falan) 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.