Я новичок в Bourne shell и хочу сделать простое симуляцию массива. Это работает:Как передать переменную оболочки awk в оболочку Bourne?
COLORS='FF0000 0000FF 00FF00'
i=2
color=$(echo ${COLORS} | awk '{print $2}')
echo "color selected: $color"
То, что я хочу сделать, это пройти $i
вместо фиксированного $2
параметра в печати (это позже будет использоваться в цикле). Я потратил несколько часов на правильное сочетание одиночных и двойных кавычек, чтобы сделать это, не повезло.
Ближайший я получил это
color=$("echo ${COLORS} | awk '{print "$"${i}}'")
В результате пробег:
+ COLORS=FF0000 0000FF 00FF00
+ i=2
+ echo FF0000 0000FF 00FF00 | awk '{print $2}'
./tempgraph.sh: ./tempgraph.sh: 37: echo FF0000 0000FF 00FF00 | awk '{print $2}': not found
+ color=
+ echo color selected:
color selected:
Любая помощь приветствуется.
Спасибо! Он работает хорошо, хотя я не уверен, что лучше понимаю цитаты. Можно было бы подумать, что двойные кавычки съедаются оболочкой после расширения материала в ней, но, похоже, они также передаются awk. – Arthur
Они * * съедены оболочкой, но одинаковые кавычки. Оба заключают строку. Например, обычно 'foo a b' передает' a' как первый аргумент 'foo', а' b' - второй аргумент. Но с 'foo 'a b" 'оболочка передает' a b' как единственный аргумент 'foo'. Большая разница между одиночными и двойными кавычками заключается в том, что с двойными кавычками вы можете «вставлять» другие вещи, такие как переменные: если вы передаете '' $ i'' в качестве аргумента, действительно передается строка '$ i'. Но с '' $ i "' передается содержимое переменной 'i'. – DarkDust