Portál AbcLinuxu, 10. května 2025 19:06
tohle funguje ale tohle nechci AAA=$(</tmp/var) echo "${AAA%%_*}" > /tmp/add_var
chci tohle řešení ale tohle nefunguje echo "${$(</tmp/var)%%_*}" >> /tmp/add_var echo "${`</tmp/var`%%_*}" > /tmp/add_var echo "${$(cat /tmp/var)%%_*}" > /tmp/add_var echo "${`cat /tmp/.var`%%_*}" > /tmp/add_varDíky za pomoc
Řešení dotazu:
${
musí být jméno proměnné, nikoli její obsah. Mezi jménem a obsahem je setsakramentský rozdíl.
Navíc se jméno proměnné stejně neexpanduje (kromě nepřímého jména s !), expanduje se pouze část za případným operátorem (zde %%). Jak přesně, to je popsáno v sekci Parameter Expansion.
Kromě toho polovina těch konstrukcí uvnitř jsou úplné nesmysly, jako např. `</tmp/var`
, což přeloženo do češtiny znamená ‚spusť příkaz </tmp/var
(což nic neudělá, protože to přesměruje vstup prázdného příkazu) a jeho výstup (který je tedy vždy prázdný) sem vlož`, tudíž by to nemělo smysl ani v místě, kde by to shell expandoval.
1) mám soubor /tmp/var 2) soubor /tmp/var obsahuje text: aaa a aa _ bb bbbbbb b bb 3) do jednoho souboru /tmp/lt_var chci uložit text který je před podtržítkem v souboru /temp/var 4) do druhého souboru /tmp/rt_var chci uložit text který je za podtržítkem v souboru /temp/varŘešení je samozřejmě jednoduché ale potřebuji jiné řešení, bez použití proměnných
TXT=$(</tmp/var) echo "${TXT%%_*}" > /tmp/lt_var echo "${TXT##*_}" > /tmp/rt_varproto jsem se snažil už zoufale o takové nesmyslné výkřiky do tmy s nadějí že to půjde
echo "${$(</tmp/var)%%_*}" > /tmp/lt_varDíky za každý tip ;)
#!/bin/sh awk -F "_" '{print $1;}' </tmp/var > /tmp/lt_var awk -F "_" '{print $2;}' </tmp/var > /tmp/rt_var
" dsa dsa asd sad dsa d dd ddd w"ale jen
"dsa dsa asd sad dsa d dd ddd w"Jinak díky moc za help
sed -r 's/[[:space:]]*_.*//;s/[[:space:]]+/ /;s/^ //' </tmp/var >/tmp/lt_var sed -r 's/.*_[[:space:]]*//;s/[[:space:]]+/ /;s/ $//' </tmp/var >/tmp/rt_varPři použití BSD sedu namísto GNU sedu je zapotřebí option -E namísto -r.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.