Я пытался вычислить выражение внутри функции следующим образом:
eval "fn() { $(cat fn.sh); }"
Где fn.sh содержит следующее:
#!/bin/sh
echo "You provided $1."
Так что, когда я звоню:
fn "a phrase"`
, он печатает «Вы предоставили фразу».Однако я не могу заставить его работать.
Что особенно расстраивает, так это:
eval "$(cat fn.sh)"
работает отлично!Чего мне здесь не хватает?
Что я пробовал:
eval "fn() { \"\$(cat fn.sh)\"; }"
fn
# bash: #!/bin/sh
# echo "You provided $1."
# return 1: No such file or directory
eval "fn() { \$(cat fn.sh); }"
fn
# bash: #!/bin/sh: No such file or directory
и множество других комбинаций, большинство из которых на данный момент - работа с угадыванием.