Я изучаю книгу "Начало программирования под Linux 4-е издание" , а глава 2 посвящена программированию оболочки.Я был впечатлен примером на странице 53 и попытался разработать сценарий, чтобы показать больше об этом.Вот мой код:
enter code here
#!/bin/bash
var1=10
var2=20
var3=30
var4=40
for i in 1 2 3 4 # This works as intended!
do
x=var$i
y=$(($x))
echo $x = $y # But we can avoid declaring extra parameters x and y, see next line
printf " %s \n" "var$i = $(($x))"
done
for j in 1 2 3 4 #This has problems!
do
psword=PS$j
#eval psval='$'PS$i # Produces the same output as the next line
eval psval='$'$psword
echo '$'$psword = $psval
#echo "\$$psword = $psval" #The same as previous line
#echo $(eval '$'PS${i}) #Futile attempts
#echo PS$i = $(($PS${i}))
#echo PS$i = $(($PS{i}))
done
#I can not make it work as I want : the output I expect is
#PS1 = \[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
#PS2 = >
#PS3 =
#PS4 = +
Как я могу получить желаемый результат?Когда я запускаю его как есть, я получаю только
PS1 =
PS2 =
PS3 =
PS4 = +
Что случилось с PS1 и PS2?Почему я не получаю то же значение, которое получаю с
echo $PS1
echo $PS2
echo $PS3
echo $PS4
, потому что это то, что я пытаюсь получить.