KEDARUMA-FANTASTIC
6/17/2017 - 4:28 PM

bash parameter expansion

bash parameter expansion

http://wiki.bash-hackers.org/syntax/pe

■ Simple usage
echo "Argument  1 is: $1"
echo "Argument 10 is: ${10}"

${array[5]}
${array[*]} # count
${array[@]} # count

■ 間接
param="abcdefg"
look_var="param"
echo "${!look_var}" # abcdefg

echo ${!#} # 最後の引数

#BASHで始まる変数を列挙する
echo ${!BASH*} # BASH BASH_ARGC BASH_ARGV BASH_COMMAND BASH_LINENO BASH_SOURCE BASH_SUBSHELL BASH_VERSINFO BASH_VERSION

### replace/削除
MYSTRING="Be liberal in what you accept, and conservative in what you send"
echo "${MYSTRING#* }"   # liberal in what you accept, and conservative in what you send
echo "${MYSTRING##* }"  # send
echo "${MYSTRING% *}"   # Be liberal in what you accept, and conservative in what you
echo "${MYSTRING%% *}"  # Be

FILENAME="/home/adams/memo.txt"
echo "${FILENAME%.*}"   # /home/adams/memo
echo "${FILENAME##*.}"  # txt
echo "${FILENAME%/*}"   # /home/adams
echo "${FILENAME##*/}"  # memo.txt

FILE_EXT="${FILENAME##*/}" # memo.txt
FILEBASE="${FILE_EXT%.*}"  # memo

${変数#パターン}  前方一致、最短削除
${変数##パターン} 前方一致、最長削除
${変数%パターン} 後方一致、最短削除
${変数%%パターン} 後方一致、最長削除
${変数/パターン/置換文字列} 最長一致を初回だけ置換
${変数//パターン/置換文字列} 一致をすべて置換


array=(This is a text)
echo "${array[@]%is}"   # Th  a text

echo "${MYSTRING//conservative/happy}" # Be liberal in what you accept, and happy in what you send
echo "${MYSTRING/in/by}"               # Be liberal by what you accept, and conservative in what you send
echo "${MYSTRING//in/by}"              # Be liberal by what you accept, and conservative by what you send
echo "${MYSTRING//conservative/}"      # Be liberal in what you accept, and  in what you send
echo "${MYSTRING//conservative}"       # Be liberal in what you accept, and  in what you send

XXX=xxxxxxxxxx
echo "${XXX/#x/y}"                # yxxxxxxxxx
echo "${XXX/%x/y}"                # xxxxxxxxxy

### length
echo "${#MYSTRING}"      # 64
echo ${#array[1]}        # 2
echo ${#array[@]}        # 4

### substring
echo ${MYSTRING:34}      # conservative in what you send
echo ${MYSTRING:34:13}   # conservative
echo ${MYSTRING: -10:5}  # t you
echo ${MYSTRING:(-10):5} # t you
echo ${array[0]:2:2}     # is
echo ${array[@]:1:2}     # is a

### default value
echo "Your home directory is: ${HOME:-/home/$USER}."

array=()
echo ${array2[@]-This array is NULL or unset}

array=("" word)

read -p "Enter your gender (just press ENTER to not tell us): " GENDER
echo "Your gender is ${GENDER:=a secret}."
echo "Ah, in case you forgot, your gender is really: $GENDER"

### Use an alternate valueまで、あとは次回