Giriş
Şöyle yaparız.
Parameter expansion çok fazla farklı söz dizimine/forma sahip. Bu yüzden bence karışık bir konu. Bazı temel özellikler şöyle
Temel Kullanım
1. Değişkenin Değerine Erişmek
Bir değişkenin değerine erişmek istediğimizde parameter expansion yapmak gerekir. Bu durumda $foo şeklinde kullanırız. Yani dolar işaretinden sonra değişken ismi gelir.
Bazen değişkene bitişik olarak başka karakterler de bulunur. Bu durumda değişken ismini süslü parantezler içine almak gerekir. ${foo}abc şeklide kullanırız
2. Değişkene Varsayılan Değer Atamak - Default Expansion
Değişkene değer atanmamışsa varsayılan bir değer kullanmak isteyebiliriz. Açıklaması şöyle
One useful form of parameter expansion is to use a default value for a variable if it is not set. This is done with the syntax: ${VAR:-DFLT}.
Örnek
Şöyle yaparız
TEST_MODE=${TEST_MODE:-0}
3. Değişkenini Uzunluğuna Erişmek
Açıklaması şöyle
The final form of parameter expansion I want to mention is one which simply expands to the length of the variable's value, its form is ${#VAR}.
Gelişmiş Kullanım
1. Replace a Substring veya String Substitution
Açıklaması şöyle
Another useful form of parameter expansion is to expand a variable and do string substitution on the value using the form ${VAR/search/replace}.
Örnek
Şöyle yaparız. var1 değişkeni içindeki placeholder var2 ile yer değişiyor
var1='<tr>
<th>unique_placeholder_var2</th>
</tr>'
var2=test
echo "${var1/unique_placeholder_var2/"$var2"}"
Örnek
Şöyle yaparız
files=(*)
echo "${files[@]/#/--hidden-import=}"
Açıklaması şöyle. Eşleşmenin başına "--hidden-import=" eklemesi yapar.
Here the # in ${var/#match/replacement} makes it replace the (zero-length) matching string only at the beginning of the variable. Also note the usage of files[@] to get all elements of the array instead of just the first one.
Çıktı olarak şunu alırız
--hidden-import=cpu_mon --hidden-import==disk_mon --hidden-import==mem_mon
2. Remove Suffix - % veya %% Kullanılır
Açıklaması şöyle. Tek % karakteri varsa en kısa eşleşme silinir, çift % karakteri varsa en uzun eşleşme silinir.
The form ${VAR%pattern} removes a matching suffix (single percent for the shortest suffix, double for the longest).
Remove Suffix ve Remove Prefix ile ilgili hatırlatıcı bir not şöyle
Note: if you have trouble remembering which is which of these two syntaxes, the "#" is to the left of the "%" key on your keyboard, just as prefixes come before suffixes. Also note that these are glob patterns not regular expressions.
Örnek
Şöyle yaparız. TLC_2017.csv isimli dosyayı TLC_2017_prepped.csv haline getirir
3. Remove Prefix - # veya ## Kullanılır
for file in TLC*.csv; do
cut -d, -f2- "${file}" > "${file%.*}_prepped.csv"
done
Açıklaması şöyle${file%.*} removes everything after the last dot of $file. If you want to remove everything after the first dot, then you would use %%.
Likewise, ${file#*.} and ${file##*.} remove everything before the first/last dot.
Açıklaması şöyle. Tek hash karakteri varsa en kısa eşleşme silinir, çift hash karakteri varsa en uzun eşleşme silinir.
The form ${VAR#pattern} removes any prefix from the expanded value that matches the pattern. The removed prefix is the shortest matching prefix, if you use double pound-signs/hash-marks the longest matching prefix is removed.
Örnek
Şöyle yaparız. İlk karakteri siler
Şöyle yaparız. proj_env_repo ile başlayan bir sürü değişken bulunur. Bu değişkenlerin isminden proj_env_repo çıkarılır. Böylece TF_ENV_db_username değişkeni username değeri ile export edilir.
Örnek$ line=abc; echo "${line#?}"
bc
Açıklaması şöyleMore generally, ${variablename#word} removes word from the beginning of the contents of variablename. This is called prefix removal. word is treated as a glob which means that ? matches any single character.Örnek
Şöyle yaparız. proj_env_repo ile başlayan bir sürü değişken bulunur. Bu değişkenlerin isminden proj_env_repo çıkarılır. Böylece TF_ENV_db_username değişkeni username değeri ile export edilir.
proj_env_repo_db_username=username
proj_env_repo_db_host=host
proj_env_repo_db_port=port
for variable in "${!proj_env_repo@}"; do
export "TF_ENV${variable#proj_env_repo}"="${!variable}"
done
4. Extract Substring
Açıklaması şöyle. Offset olarak eksi sayılar da kullanılabilir.
Another expansion that exists is to extract substrings from the expanded value using the form ${VAR:offset:length}. This works in the expected form: offsets start at zero, if you don't specify a length it goes to the end of the string.
Örnek
Bir sayının ilk karakterine erişmek için şöyle yaparız.
Bir sayının ilk karakterine erişmek için şöyle yaparız.
$ var=901.32.02
$ first_char="${var:0:1}"
$ echo "${first_char}"
9
Örnek
Eksi sayı verirsek sondan itibaren ileriye doğru sayar. Eksi sayıları echo ${str:-3:2} şeklinde yazamıyoruz çünkü "Default Expansion" ile karışıyor. Bu yüzden eksi sayıları parantez içine almak lazım. Şöyle yaparız. Çıktı olarak "fg" alırız
str=abcdefghecho ${str:$((-3)):2}
Açıklaması şöyle
The "$((...))" causes bash to treat the value as an arithmetic expansion (ie a number)
5. Convert Uppercase to Lowercase veya tersi
Şöyle yaparız.
$ str="HELLO"
$ printf '%s\n' "${str,,[HEO]}"
heLLo
Hiç yorum yok:
Yorum Gönder