Проблема заключается в том, что необязательные задания параметров распознаются до того, как возникает расширение параметров , поэтому линия
$X
распознана как команда с Нет предшествующих заданий. Первое слово результата расширения предполагается, что это имя команды, поэтому оболочка пытается запустить y = 10
.
Как обычно в случае, вы не должны пытаться хранить код в переменной, а скорее в функции.
X () {
Y=10 echo foo
}
Допустим, вы работаете с каталогами, названными «SRC» и «DEST», для источника и назначения вашей копии соответственно. Вы можете использовать следующую командную трубу для устранения файлов назначения, которые не присутствуют в источнике:
find src/* dest/* |cut -d'/' -f2- |sort |uniq -u |xargs printf "dest/%s\n" |xargs rm -f
Остерегайтесь, что это работает только, если ваши имена файлов не содержат пробелов или \ '»
.